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,甚至可以基于文章的阅读数/评论数,都可以扩展...
注:互联网上每个人都倾向于展现自己最好的一面,我也不例外,请不要完全相信我写的,请独立思考..