Typecho 调用倒序文章

这两天用Typecho做另外一个网站,遇到的一个问题是,需要调用倒序文章,才发现原来typecho是不能调用倒序文章的,得修改系统文件/或是只写sql?找了网上的很多方法,都不太行,最终借助AI写了以下方法,亲测有效。

1.在function.php里面加入下面函数

// 获取分类下的文章(标题和URL),按降序
function getCategoryPosts($categoryId, $limit = 10) {
$db = Typecho_Db::get();
$select = $db->select('p.title', 'p.slug', 'p.cid', 'p.created')
    ->from('table.contents AS p')
    ->join('table.relationships AS r', 'p.cid = r.cid')
    ->where('r.mid = ?', $categoryId)
    ->where('p.status = ?', 'publish')
    ->where('p.type = ?', 'post')
    ->where('p.created < ?', Typecho_Date::gmtTime())
    ->order('p.created', Typecho_Db::SORT_ASC)
    ->limit($limit);

$posts = $db->fetchAll($select);

// 构建包含标题和URL的结果数组
$result = array();
foreach ($posts as $post) {
    $result[] = array(
        'title' => $post['title'],
        'url' => Typecho_Router::url('post', array('cid' => $post['cid'], 'slug' => $post['slug']))
    );
}

return $result;
}

2.接着在页面需要调用的位置用下面的语句调用即可

<?php  // 调用指定分类下的文章
$categoryId = 11; // 替换为您想要获取的分类ID 
$postsLimit = 5; // 限制获取的文章数量 
$posts = getCategoryPosts($categoryId, $postsLimit);
// 显示文章列表
if (!empty($posts)): ?>
<ul class="category-posts">
<?php foreach ($posts as $post): ?>
<li>
    <a href="<?php echo $post['url']; ?>"><?php echo $post['title']; ?></a>
</li>
<?php endforeach; ?>
</ul>
<?php else: ?>
<p>该分类下暂无文章</p>
<?php endif; ?>

这个方法的好处是,你不需要修改系统文件,比如网上有些教程说修改/var/Widget/Archive.php文件。
上面提供的这种方法,你可以用在任何一个需要调用倒序文章的地方,而且 通过修改 order('p.created', Typecho_Db::SORT_ASC),你可以定义排序是基于created(文章创建时间),或是基于文章的cid,甚至可以基于文章的阅读数/评论数,都可以扩展...

注:互联网上每个人都倾向于展现自己最好的一面,我也不例外,请不要完全相信我写的,请独立思考..

上一篇

思考的真相