Typecho代码版读者墙(不带头像缓存)
之前有博主来这里留言说,没有读者墙,刷着没意思。那时我也还没折腾一个读者墙的想法,直到昨晚,就心血来潮,想折腾一个读者墙出来玩一下。好了,于是这个玩意就诞生了。
读者墙,说白了就是评论者按一定的顺序筛选,可以筛选全部的评论,可以筛选一段时间内的,可以按评论次数正序,倒序,总之都可以自己折腾。
代码其实网上有很多现成的,不过也不一定能完全符合自己。我这种不懂什么代码的,就只会修改别人的,使得符合自己使用。代码我也忘记是从哪里copy来的了,搜索了很多,一个个看,从一开始的自己折腾头像缓存代码的,调试很久无果,再后来用了头像缓存插件的,不知何故,很慢,故弃用。然后就剩下这个,头像直接读取远程服务器的,不缓存,速度反而快,还有木有节操啊?
反正就是启用了头像缓存插件,会慢到跟蜗牛一样!!!
一开始我用的是一个月,可是,发现数据很差,索性两个月得了,这不,效果如上~~~
读者墙地址,其实就是在留言板的页面上的,地址:https://itlu.net/guestbook/
下面贴个代码:
<?php
function getFriendWall(){
$period = time() - 2592000; // 单位: 秒, 时间范围: 30天
$db = Typecho_Db::get();
$sql = $db->select('COUNT(author) AS cnt', 'author', 'url', 'mail')
->from('table.comments')
->where('created > ?', $period )
->where('status = ?', 'approved')
->where('type = ?', 'comment')
->where('authorId = ?', '0')
->where('mail != ?', '[email protected]') //排除自己上墙
->group('author')
->order('cnt', Typecho_Db::SORT_DESC)
->limit('26'); //读取几位用户的信息
$result = $db->fetchAll($sql);
$mostactive = "";
$my_array=array('www','0','1','2'); //我自定义的随机一个头像服务器,减少同时往一个服务器发起多次请求
if (count($result) > 0) {
foreach ($result as $value) {
$mostactive .= '<li><a href="' . $value['url'] . '" title="' . $value['author'] . ' : ' . $value['cnt'] . '次重要讲话" target="_blank" rel="nofollow">';
$mostactive .= '<img class="avatar" src='/index/thumb.png' data-original="http://'.$my_array[rand(0,3)].'.gravatar.com/avatar/'.md5(strtolower($value['mail'])).'?s=32&d=&r=G" width="32" height="32" /></a></li>';
}
echo $mostactive;
}
}
?>
function getFriendWall(){
$period = time() - 2592000; // 单位: 秒, 时间范围: 30天
$db = Typecho_Db::get();
$sql = $db->select('COUNT(author) AS cnt', 'author', 'url', 'mail')
->from('table.comments')
->where('created > ?', $period )
->where('status = ?', 'approved')
->where('type = ?', 'comment')
->where('authorId = ?', '0')
->where('mail != ?', '[email protected]') //排除自己上墙
->group('author')
->order('cnt', Typecho_Db::SORT_DESC)
->limit('26'); //读取几位用户的信息
$result = $db->fetchAll($sql);
$mostactive = "";
$my_array=array('www','0','1','2'); //我自定义的随机一个头像服务器,减少同时往一个服务器发起多次请求
if (count($result) > 0) {
foreach ($result as $value) {
$mostactive .= '<li><a href="' . $value['url'] . '" title="' . $value['author'] . ' : ' . $value['cnt'] . '次重要讲话" target="_blank" rel="nofollow">';
$mostactive .= '<img class="avatar" src='/index/thumb.png' data-original="http://'.$my_array[rand(0,3)].'.gravatar.com/avatar/'.md5(strtolower($value['mail'])).'?s=32&d=&r=G" width="32" height="32" /></a></li>';
}
echo $mostactive;
}
}
?>
调用方法:
<?php echo getFriendWall();?>
赏
转载本站原创文章请注明:文章转自 挨踢路,链接: https://986554.ykncch.asia/articles/1954.html
请教过问题,
->order('cnt', Typecho_Db::SORT_DESC)
如果要按评论先后排序,显示最近评论的列表,这里得怎么修改呢?谢谢指点。
王老师,新年好。今天没用电脑,我改天看看
新年好哈,先谢谢了。
大佬,再请教个问题:
->order('cnt', Typecho_Db::SORT_DESC)
如果要改成按评论由新到旧排列,显示最新评论者的头像,应该怎么改呢?
我把cnt改成created后,显示的按评论者用户创建的顺序来排列,不是按发布评论内容的顺序排列呢。