实现随机文章列表的方法

一直在想做一个随机列表插件,对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>'); ?>

 

 

Published by 阿飞 on
Tags: typecho, 随机

1 条评论

  1. 临时解决办法可以考虑,版本升级会带来麻烦。期待插件吧。