实现随机文章列表的方法
一直在想做一个随机列表插件,对typecho和面向对象的编程方式不熟,所以暂时就不能实现。 下面是通过改动一些文件来实现随机文章列表的显示,效率应该不是很高,不过对于我的小博客应该没有问题,数据量如果比较大(上万行的数据)就要另想办法了。
1.在\var\Typecho\Db.php文件中36行左右添加下列内容,数据库不同添加内容不同。
针对mysql数据库添加 /** 随机排序 */
const SORT_RAND = 'RAND()';
如果是sqlite数据库则是: /** 随机排序 */
const SORT_RAND = 'RANDOM()';
2.新建\var\Widget\Contents\Post\Rand.php文件内容如下
<?php
/**
* 随机文章
*
* @category typecho
* @package Widget
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org)
* @license GNU General Public License 2.0
* @version $Id$
*/
/**
* 随机文章组件
*
* @category typecho
* @package Widget
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org)
* @license GNU General Public License 2.0
*/
class Widget_Contents_Post_Rand extends Widget_Abstract_Contents
{
/**
* 执行函数
*
* @access public
* @return void
*/
public function execute()
{
$this->parameter->setDefault(array('pageSize' => $this->options->postsListSize));
$this->db->fetchAll($this->select()
->where('table.contents.status = ?', 'publish')
->where('table.contents.type = ?', 'post')
->order('', Typecho_Db::SORT_RAND)
->limit($this->parameter->pageSize), array($this, 'push'));
}
}
3.在模板中的sidebar.php文件中合适地方放上如下内容
<?php $this->widget('Widget_Contents_Post_Rand')->parse('<li><a href="{permalink}">{title}</a></li>'); ?>
临时解决办法可以考虑,版本升级会带来麻烦。期待插件吧。