Typecho博客系统1.3版增加随机文章列表到侧边栏
博客运行二十年,代码由ASP换为PHP,风格由简到繁,从pjblog系统换成Wordpress系统。现在又想到由繁到简,又换成Typecho 1.3版本系统,搭配memoo主题风格。可惜,这个主题没有随机文章列表侧边栏显示功能,只有最新文件列表,首页显示与最新正文列表标题基本重合。
网上找了各种方法,有插件的、有代码的,由于兼容的是Typecho旧版,会出现获取不了文章链接的情况,出现permalink未定义的错误。又找了几个所谓的解决办法,一无所获,问题没有解决。再要求AI修正网友提供的插件的或单独的函数代码,依然出现问题。
不得已,只有让AI直接生成,可是AI也想得多,什么CSS样式、摘要功能一起上,还给出函数功能开关,反而又出一些小问题。通过手动精简,终于测试成功,方法如下。
一、在主题目录里的functions.php后面加上以下代码:
/**
* Typecho1.3 侧边栏真正随机文章
* @param int $num 展示数量
* @param bool $showDate 是否显示日期
* @param bool $showCate 是否显示分类
* @return void
*/
function widget_random_posts($num = 5, $showDate = true, $showCate = false)
{
// 核心:使用通用内容组件,支持自定义RAND随机排序
$db = Typecho_Db::get();
$select = $db->select()
->from('table.contents')
->where('type = ?', 'post')
->where('status = ?', 'publish')
->where('password IS NULL') // 排除加密文章
->order('RAND()')
->limit($num);
$posts = $db->fetchAll($select);
if (empty($posts)) {
echo '<li class="random-post-item empty">暂无已发布文章</li>';
return;
}
foreach ($posts as $row) {
// 文章基础信息
$cid = $row['cid'];
$title = htmlspecialchars($row['title']);
$permalink = Typecho_Router::url('post', $row);
$created = $row['created'];
// 获取分类(兼容无分类文章,避免报错)
$cateName = '';
if ($showCate) {
$cateSelect = $db->select()->from('table.metas')
->join('table.relationships', 'table.metas.mid = table.relationships.mid')
->where('table.relationships.cid = ?', $cid)
->where('table.metas.type = ?', 'category')
->limit(1);
$cate = $db->fetchRow($cateSelect);
if (!empty($cate['name'])) {
$cateName = htmlspecialchars($cate['name']);
}
}
// 日期格式化
$postDate = date('Y-m-d', $created);
?>
<li ><?php if ($showCate && !empty($cateName)): ?>
<span >【<?php echo $cateName; ?>】</span>
<?php endif; ?>
<a href="<?php echo $permalink; ?>" title="<?php echo $title; ?>">
<?php echo mb_substr($title, 0, 22, 'utf-8'); ?>
<?php if (mb_strlen($title) > 22) echo '...'; ?>
</a><?php if ($showDate): ?>
<span ><?php echo $postDate; ?></span>
<?php endif; ?>
</li>
<?php
}
}
二、在主题目录里的sidebar.php的最新文章代码上面加上以下代码:
<section class="widget">
<h3 class="widget-title"><?php _e('随机文章'); ?></h3>
<ul class="widget-list">
<?php widget_random_posts(10, true, true); ?>
</ul>
</section>
说明:widget_random_posts(条数(数字), 日期(true或false), 分类(true或false))
三、侧边栏即可呈现以下效果:
【忆古记今】 生命之重 2010-05-02
【诗心词韵】 中学晚自习夜归图 2024-09-03
【诗心词韵】 警奢养身 2024-11-24
【诗心词韵】 雨隐夕阳 2024-08-17
【诗心词韵】 网安才重 2024-09-16
【诗心词韵】 正安虎踏石回水湾 2024-11-19
【忆古记今】 春运成了春劫,安全如何保障? 2007-02-25
【忆古记今】 有关我的网名 2006-11-27
【诗心词韵】 修路之惑 2024-09-14
【诗心词韵】 天楼山信号塔 2024-08-04