最近在开发Pinghsu主题,遇到了一个比较刺手的问题,就是调用Widget的Widget_Contents_Post_Recent
时,如果一个页面下两次调用了这个,其pageSize
参数值默认取这两次中的最大。
目前网上搜索是没有这个问题的解决方法,所以只能自己想,无所谓了,就自己想。
下面我讲一下我是怎么解决的。
那就写一个function函数去调用···
解决过程
在主题里的function.php
页创建一个新的函数,叫getRecentPosts,如下
function getRecentPosts(){
}
给这个函数带两个参数,一个是用来传入当前对象,我们先叫obj如下
function getRecentPosts($obj){
}
好了,开始连接数据库并获取最近10篇文章的cid,如下
$db = Typecho_Db::get();
$rows = $db->fetchAll($db->select('cid')
->from('table.contents')
->where('type = ? AND status = ?', 'post', 'publish')
->order('created', Typecho_Db::SORT_DESC)
->limit(10));
获取到文章的cid之后,就好办了,套个循环,逐个去做解析,如下
foreach($rows as $row){
$cid = $row['cid'];
$apost = $obj->widget('Widget_Archive@post_'.$cid, 'type=post', 'cid='.$cid);
$output = '<li><a href="'.$apost->permalink .'">'. $apost->title .'</a></li>';
echo $output;
}
然后整理一下,最终如下
function getRecentPosts($obj){
$db = Typecho_Db::get();
$rows = $db->fetchAll($db->select('cid')
->from('table.contents')
->where('type = ? AND status = ?', 'post', 'publish')
->order('created', Typecho_Db::SORT_DESC)
->limit(10));
foreach($rows as $row){
$cid = $row['cid'];
$apost = $obj->widget('Widget_Archive@post_'.$cid, 'type=post', 'cid='.$cid);
$output = '<li><a href="'.$apost->permalink .'">'. $apost->title .'</a></li>';
echo $output;
}
}
然后在我们需要的地方加入一段代码就可以执行了,如下
<?php getRecentPosts($this); ?>
优化函数
感觉这样用起来不方便,我们再加一个pageSize
参数用来控制最近文章的数目,修改如下
function getRecentPosts($obj,$pageSize){
省略···
->limit($pageSize));
省略···
}
好了,水了那么多,最终的代码是这样的,如下
function getRecentPosts($obj,$pageSize){
$db = Typecho_Db::get();
$rows = $db->fetchAll($db->select('cid')
->from('table.contents')
->where('type = ? AND status = ?', 'post', 'publish')
->order('created', Typecho_Db::SORT_DESC)
->limit($pageSize));
foreach($rows as $row){
$cid = $row['cid'];
$apost = $obj->widget('Widget_Archive@post_'.$cid, 'type=post', 'cid='.$cid);
$output = '<li><a href="'.$apost->permalink .'">'. $apost->title .'</a></li>';
echo $output;
}
}
用法和上面的几乎一样,只是多了个参数,如下
<?php getRecentPosts($this,10); ?>
测试
好像没什么好测,在有Widget_Contents_Post_Recent
的页面下调用这个函数,不再发生pageSize
的取最大值的问题了。
至此,问题已经解决。
如果遇到其他多个Widget
的pageSize
的问题,这篇教程应该可以帮到你。
本文由 Chakhsu Lau 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。
主题好漂亮啊~