typecho添加按文章修改时间排序的独立页面
搜索了一圈都没有发现现成的例子,动手自己改了一个。
总体方法参考了不安装插件添加归档页面的方法和typecho添加接口方法
这个添加归档页面的方法中使用了typecho内核预制一个Widget接口,Widget_Contents_Post_Recent,位于typecho/var/Widget/Contents/Post中的Recent.php中。
仿照Recent.php在同目录下添加Update.php文件,内容如下
<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
class Widget_Contents_Post_Update 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.modified < ?', $this->options->time)
->where('table.contents.type = ?', 'post')
->order('table.contents.modified', Typecho_Db::SORT_DESC)
->limit($this->parameter->pageSize), array($this, 'push'));
}
}
主要修改了接口名称Widget_Contents_Post_Update,数据库字段table.contents.modified
然后在主题目录typecho/usr/themes/xxx/下添加模版,page-update.php,内容如下
<?php
/**
* update
* @package custom
*/
$this->need('header.php');?>
<div class="col-8" id="main">
<div class="res-cons">
<article class="post">
<div class="post-content-pages">
<?php $this->widget('Widget_Contents_Post_Update', 'pageSize=30')->to($archives);
$year=0; $mon=0; $i=0; $j=0;
$output = '<div id="archives">';
while($archives->next()):
$year_tmp = date('Y',$archives->modified);
$mon_tmp = date('m',$archives->modified);
//var_dump($year_tmp);
$y=$year; $m=$mon;
if ($mon != $mon_tmp && $mon > 0) $output .= '</ul></li>';
if ($year != $year_tmp && $year > 0) $output .= '</ul>';
if ($year != $year_tmp) {
$year = $year_tmp;
$output .= '<div class="al_year">'. $year .' 年</div><ul class="al_mon_list">'; //输出年份
}
$output .= '<li>'.date('m/d',$archives->modified).'<a href="'.$archives->permalink .'">'. $archives->title .'</a></li>'; //输出文章日期和标题
endwhile;
$output .= '</ul></li></ul></div>';
echo $output;
?>
</div>
</article>
</div>
</div>
<?php $this->need('sidebar.php'); ?>
<?php $this->need('footer.php'); ?>
主要修改了模版名称update,接口名称Widget_Contents_Post_Update,变量名称modified
最后在typecho后台添加独立页面选择update这个模版。