该文主要用到的方法是修改 TYPECHO 源码,达到实现随机文章列表的功能,并且通过可以实现某个具体分类下的随机文章调用,但不建议使用该方法,因为一旦系统升级,可能就会收到影响,建议大家参考另外一篇文章,实现网站随机文章调用 : 如何通过修改 TYPECHO 主题文件来实现网站随机文章列表功能? ,另外还有一个方法就是直接使用插件实现,可以参考:Typecho 随机文章列表插件RandomArticleList 。
在var/Widget/Contents/Post目录新建Rand.php文件,内容如下:
<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
class Widget_Contents_Post_Rand extends Widget_Abstract_Contents
{
/**
* 执行函数
*
* @access public
* @return void
*/
public function execute()
{
$this->parameter->setDefault(array('pageSize' => $this->options->postsListSize));
$select = $this->select();
if(isset($this->request->mid)){
$select->join('table.relationships', 'table.contents.cid = table.relationships.cid')
->where('table.relationships.mid = ?', $this->request->mid);
}
$select->where('table.contents.status = ?', 'publish')
->where('table.contents.created < ?', $this->options->gmtTime)
->where('table.contents.type = ?', 'post')
->order('', 'RAND()')
->limit($this->parameter->pageSize);
$this->db->fetchAll($select, array($this, 'push'));
}
}
使用方法
<div>
<ul>
<?php $this->widget('Widget_Contents_Post_Rand','pageSize=5')
->parse('<li><a href="{permalink}">{title}</a></li>'); ?>
</ul>
</div>
显示某个分类下的随机文章
<div>
<ul>
<?php $this->widget('Widget_Contents_Post_Rand','pageSize=5','mid=3')
->parse('<li><a href="{permalink}">{title}</a></li>'); ?>
</ul>
</div>