闻心阁

一蓑烟雨看苍生,半壶浊酒笑红尘

Typecho调用文章随机排序和自定义排序

2015-04-05 约 1 分钟读完 搬砖秘籍

在Typecho里调用随机文章目前没有找到完美的解决方案。下面是本文所有的解决方法。

方法一

参考文章,这是个比较粗暴的解决方案。要改的东西多,也不简洁,不过可以尝试下。

方法二

推荐一个牛逼的插件,其实这个方法没有实现随机排序,但是可以自定义排序。不过只能是content表的几个字段(仅个人验证观点)。

方法三

就是本人所采用的方法了:也就是 方法1+方法2

首先要利用方法一,在var/Typecho/Db.php 第36行添加:

/** 随机排序 */ 
const SORT_RAND = 'RAND()'; //mysql
const SORT_RANDOM = 'RANDOM()';//sqlite

然后删除BufannaoCms/Plugin.php第143行左右的query函数,加入自定义的query函数。如下:

/**
 * 提交查询
 * 
 * @access public
 * @return void
 * @by YQC
 */
public static function query($widget, $select)
{
    if (isset($widget->request->yqcrand)) {
        $select->order('', Typecho_Db::SORT_RAND);
    }
    Typecho_Db::get()->fetchAll($select, array($widget, 'push'));
}

调用方法

<?php $this->widget('Widget_Archive@index1', 'pageSize=2&type=category', 'mid=496&yqcrand=hah')->to($categoryPosts); ?>

调用的时候传入yqcrand这个参数即可。上面的方法也就是在Typecho调用特定分类文章中所用到的,可能参考。

自定义排序

BufannaoCms的插件可以实现这个功能了。