实现随机文章列表的方法

插件开发及发布

版主: woniou

回复
wwwdsd
帖子: 262
注册时间: 2009年 6月 13日 23:06
联系:

实现随机文章列表的方法

帖子 wwwdsd »

一直在想一个随机插件,对typecho和面向对象的编程方式不熟,所以暂时就不能实现。
下面是通过改动一些文件来实现随机文章列表的显示,请谨慎操作,如果你的数据较多(文章过万)也不建议采取这个方式。如果对php不熟悉,请在专业人士指导下完成下面的操作。
1.在varTypechoDb.php文件中36行左右添加下列内容,数据库不同添加内容不同。
针对mysql数据库添加

代码: 全选

    /** 随机排序 */
    const SORT_RAND = 'RAND()';

如果是sqlite数据库则是:

代码: 全选

    /** 随机排序 */
    const SORT_RAND = 'RANDOM()';

2.新建varWidgetContentsPostRand.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文件中合适地方放上如下内容(以default模板为例)

代码: 全选

       <div class="widget">
         <h3 class="alt"><?php _e('随机文章'); ?></h3 class="alt">
            <ul>
                <?php $this->widget('Widget_Contents_Post_Rand')
                ->parse('<li><a href="{permalink}">{title}</a></li>'); ?>
            </ul>
       </div>

主要是这句:

代码: 全选

<?php $this->widget('Widget_Contents_Post_Rand')
                ->parse('<li><a href="{permalink}">{title}</a></li>'); ?>

具体效果见http://www.df-blog.cn/左侧边栏
头像
aijun
帖子: 117
注册时间: 2009年 7月 10日 03:04
联系:

Re: 实现随机文章列表的方法

帖子 aijun »

你很牛B,不过我还是期待插件。
rebill
帖子: 14
注册时间: 2009年 8月 6日 07:54
联系:

Re: 实现随机文章列表的方法

帖子 rebill »

改动得比较多,确实不是很适合初级用户。
wwwdsd
帖子: 262
注册时间: 2009年 6月 13日 23:06
联系:

Re: 实现随机文章列表的方法

帖子 wwwdsd »

已通过插件实现
具体见http://www.df-blog.cn/archives/174.html
头像
zyzzc
帖子: 648
注册时间: 2009年 9月 25日 20:11
联系:

Re: 实现随机文章列表的方法

帖子 zyzzc »

支持!虽然我那空博客暂时还没啥可随机 呵呵
Dull
帖子: 7
注册时间: 2009年 4月 2日 08:49

Re: 实现随机文章列表的方法

帖子 Dull »

mysql的rand效率太低
可以用下面的方法
1、查询所有的需要随机的ID保存成个数组
2、从这个数组中随机出来一个ID库
3、用id in查询这个ID库
头像
zyzzc
帖子: 648
注册时间: 2009年 9月 25日 20:11
联系:

Re: 实现随机文章列表的方法

帖子 zyzzc »

这个插件已经出来了,用的新随机算法
回复