这篇文章上次修改于 204 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

继上文typecho添加文章归档页

由于我所使用的single主题“时光机”功能与归档页面存在冲突,因此决定将主题的“最新文章”列表修改为“随机文章”列表,这样既可以规避归档页面的冲突,也能更丰富地展示文章。

方法如下:
1.新建Rand.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'));
}
}

将此随机函数代码放入var/Widget/Contents/Post目录下。

2.在single主题的“最新文章”中的调用代码:

<?php $this -> widget('Widget_Contents_Post_Recent', 'pageSize=6') -> parse('<li><a href="{permalink}" target="_blank">{title}</a></li>'); ?>

修改为

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

也就是调用Rand.php文件,保存即可,这样就实现了随机文章的展示功能。在不同主题上的调用方法类似。