调试typecho非插件读者墙

首页电脑网络调试typecho非插件读者墙(2012年06月20日)

前几天就在折腾一个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()函数失效问题

已有 7 条评论 »

  1. 看到很多博客都在用,话说你这个代码高亮是哪个插件0.0 ?
    感觉比我那个好看...

    1. 没弄插件,自己照网上文章折腾的,代码高亮传送门

  2. 来过

  3. 不错的插件

  4. 那个斜杠不是错误,如果使用时有问题说明博客不在根目录。。。

    1. 不是,缓存插件设置目录后面默认跟了个“/”,这里再加个“/”就变成两个“/”了,所以file_exists()判断头像文件是否存在的时候,就出错了,就都输出default.jpg了

添加新评论 »

You must enable javascript to see captcha here!