前几天就在折腾一个typecho的读者墙,网上看了一下,好想多数是wordress的读者墙。
其实typecho的读者墙有一个插件的,比较实用,不过我没有试过,我喜欢瞎折腾。
网上找来的typecho的读者墙,还有血条功能,我是删除了血条的相关行,但是前几天用的时候,好想不行,总是出来的default.jpg头像,搞得好不郁闷,无奈不会编程,只有放下了。昨天心血来潮,又去折腾了一下,发现这个读者墙和GravatarCache头像缓存插件的默认目录设置有一点点冲突,导致永远显示default.jpg,其实就是判断头像的地方多了一个"/"导致判断头像文件不存在,调用default.jpg,我看蚂蚱的sina APP站上的代码也有这个问题,下面贴出修改过的typecho读者墙实现代码:
//获得读者墙 function getFriendWall() { $db = Typecho_Db::get(); $sql = $db->select('COUNT(author) AS cnt', 'author', 'url', 'mail') ->from('table.comments') ->where('status = ?', 'approved') ->where('type = ?', 'comment') ->where('authorId = ?', '0') ->where('mail != ?', 'skyong@qq.com') //排除自己上墙 ->group('author') ->order('cnt', Typecho_Db::SORT_DESC) ->limit('12'); //读取几位用户的信息 $result = $db->fetchAll($sql); $mostactive = ""; $option = Typecho_Widget::widget('Widget_Options')->plugin('GravatarCache'); //载入缓存头像插件作判断条件 if (count($result) > 0) { foreach ($result as $value) { $mostactive .= '<a href="' . $value['url'] . '" title="' . $value['author'] . ' : ' . $value['cnt'] . '次重要讲话" target="_blank" rel="nofollow">'; $mostactive .= '<img class="avatar" src="'.$option->dir .''; //调用缓存头像,路径看你的插件设置 if (file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$option->dir . '' . md5(strtolower($value['mail'])) . '.jpg')) { //2012.06.27增加 $_SERVER['DOCUMENT_ROOT'].'/'. 头 $mostactive .= md5(strtolower($value['mail'])); //输出缓存头像,网上版本上一行多了一个“/” } else { $mostactive .= 'default'; //不存在缓存头像,则输出默认头像 } $mostactive .= '.jpg" width="32" height="32" /></a>'; } echo $mostactive; } }
实用方法:
1、安装并启用Gravatar头像缓存插件:http://www.byends.com/study/GravatarCache_V2-0-0.html
2、在主题目录中新建functions.php(入过有则在里面添加即可)里定义调取读者墙。
3、在主题的css里加上你想要的效果代码。这里就不多说了。
4、在需要的地方,调用读者墙:<?php getFriendWall(); ?>
——————————————————————————————
2012.06.27:上面的原代码调整了以下,解决了在某些安全设置严苛的主机环境中判断文件失效的问题,导致永远显示default.jpg的现象,可以参看日志:《PHP的file_exists()、is_dir()、is_file()函数失效问题》
看到很多博客都在用,话说你这个代码高亮是哪个插件0.0 ?
感觉比我那个好看...
没弄插件,自己照网上文章折腾的,代码高亮传送门
来过
雁过留声,哈哈
不错的插件
那个斜杠不是错误,如果使用时有问题说明博客不在根目录。。。
不是,缓存插件设置目录后面默认跟了个“/”,这里再加个“/”就变成两个“/”了,所以file_exists()判断头像文件是否存在的时候,就出错了,就都输出default.jpg了