开发模板的时候,经常会遇到这些问题。不知道这个分类&用户&文章的字段怎么调用,去百度查了半天发现用不了?二是知道了这个字段怎么调用,但是又不知道怎么把它作为参数传进其它方法,三是自己添加了一些字段,或者需要的字段,typecho调用不出来?但是实际上解决的办法都很简单。
答案是,用最暴力的方式,跳过Typecho的自带方法定义,直接查库。
这篇文章其实对大佬而言是小儿科,但是我觉得还是可以放在这里水一水。我只演示用户,文章,标签分类,具体的直接复制粘贴然后自己改一下语句就好了。
在模板的function.php中放入如下代码,
查询单用户所有信息:
function userInfo($value,$uid)
{
$db = Typecho_Db::get();
$prow = $db->fetchRow($db->select($value)->from('table.users')->where('uid = ?', $uid));
$text = $prow[$value];
return $text;
}
使用方法如下:
注意$uid这个参数代表传入了用户ID,可以是登录后用户ID:$this->user->screenName,也可以是文章作者ID:$this->author->uid,或者评论者id,反正根据对应的用户uid,就可以查出包括密码在内的所有单个用户数据。而且支持数据量用户表所有的字段,无论是不是typecho自带或者自己添加。后面的所有方法,都是如此,所以不再重复说明。
<?php echo userInfo('mail',$uid); ?> //会员邮箱
<?php echo userInfo('name',$uid); ?> //会员用户名
<?php echo userInfo('screenName',$uid); ?> //会员昵称
<?php echo userInfo('url',$uid); ?> //会员网址
<?php echo userInfo('group',$uid); ?> //会员用户组
查询单文章所有信息:
function contentsInfo($value,$cid)
{
$db = Typecho_Db::get();
$prow = $db->fetchRow($db->select($value)->from('table.contents')->where('cid = ?', $uid));
$text = $prow[$value];
return $text;
}
使用方法如下:
$cid传入了文章的id,可以是指定的文章,也可以是出现在文章列表,或者是文章详情里的文章id,支持文章表里所有的字段,哪怕是typecho无法调用的。
<?php echo userInfo('text',$cid); ?> //文章内容(markdown原格式)
查询单标签或分类所有信息:
function metasInfo($value,$mid)
{
$db = Typecho_Db::get();
$prow = $db->fetchRow($db->select($value)->from('table.metas')->where('mid= ?', $uid));
$text = $prow[$value];
return $text;
}
使用方法如下:
$mid传入了标签或者分类的id,可以是指定的,支持分类标签表里所有的字段,哪怕是typecho无法调用的。
<?php echo userInfo('count',$mid); ?> //查询分类或标签下文章总数
最后
这种方法是非常暴力的查询方法,因为typecho的文档不是很齐全,老是有些标签网上找不到答案,查询也要半天。实际上主要还是最近一直都有人私聊在问,所以我干脆整理个简单的文章。总之,因为每一次查询都要操作数据库,这些方法建议是用在一些查询量比较低的情况下,不然性能消耗会很大。
另外,在举起反三的情况下,typecho的所有数据库信息都可以查询出来,无视默认的模板标签。