梁兴健

实现每评论一次自动排第一功能(Typecho版)
在我第一次进入boke112的时候,就被它首页的“每评论一次就会自动排在本栏目和对应博客导航分类页面第一位”深深吸...
扫描右侧二维码阅读全文
05
2018/08

实现每评论一次自动排第一功能(Typecho版)

在我第一次进入boke112的时候,就被它首页的“每评论一次就会自动排在本栏目和对应博客导航分类页面第一位”深深吸引住了。

boke112每评论一次就会自动排在本栏目和对应博客导航分类页面第一位

然后我也想弄出这样一个功能,于是我就找人帮我写,但写出来的结果并不理想,有很多bug。

实现每评论一次自动排第一功能

第一次做这个功能是两个月前的事情,群里的一位小哥帮我写的,那时候的bug很多,经常出现网址错误、名字错误和空白等。

现在周末闲着没事干,就把这个功能修复了一下,虽然这代码看起来就这么几十行,但我花了很多精力在上面,我没学过PHP,所以每个函数都是查百度查了很久才查出来的。(被迫学习。。)

现在我又忘了这些函数是什么意思了,不管了,反正能用就行。

这是我在本博客里使用的效果:

实现每评论一次自动排第一功能(Typecho版)

我感觉这效果还不错,好东西自然不能独享,正所谓独乐乐不如众乐乐,这次就拿出来和大家分享一下吧。

下面是主要代码(插入到functions.php中):

function Autofirst(){
    $db = Typecho_Db::get();
    $query = $db->select()->from('table.comments')->where('authorId = ?','0')->order('coid',Typecho_Db::SORT_DESC)->limit(100);
    $result = $db->fetchAll($query);
    $arrUrl = array();
    $arrAuthor = array();
    foreach ($result as $value) {
        if($value["url"]!==null){
            array_push($arrUrl,$value["url"]);
            array_push($arrAuthor,$value["author"]);
        }
    }
    $su=array_filter(array_merge(array_unique($arrUrl)));
    $sa=array_filter(array_merge(array_unique($arrAuthor)));
    $num=0;
    for($i=0;$i<count(array_unique($su));$i++){
        if($su[$i]!=="" && $num<16){
            $num+=1;
            $db1 = Typecho_Db::get();
            $query1 = $db1->select()->from('table.comments')->where('url = ?',$su[$i])->order('coid',Typecho_Db::SORT_DESC)->limit(100);
            $result1 = $db1->fetchAll($query1);
            $arrAuthor1 = array();
            foreach ($result1 as $value) {
                    array_push($arrAuthor1,$value["author"]);
            }
            echo '<a href="'.$su[$i].'" rel="external nofollow" class="item col-lg-3 col-md-3 visible-lg visible-md" target="_blank"><i class="glyphicon glyphicon-leaf"></i> '.$arrAuthor1[0].'</a>';
        }
    }
}

这是调用代码和css(如果你跟我一样,用的是handsome主题,就直接插入到index.php的"</header>"下面):

<div class="row autofirst visible-lg visible-md">
<p>
<i class="glyphicon glyphicon-th"></i> 每评论一次就会自动排在本栏目第一位
</p>
    <?php Autofirst(100) ?>
</div>
<style>
.autofirst{
    margin:20px 20px 5px 20px;
    padding:10px;
    box-shadow: 0 1px 8px rgba(0,0,0,0.12), 0 1px 8px rgba(0,0,0,0.24);
    background-color:white;
    border-radius:3px;
}.item{
    padding:5px 0px;
}
</style>

上面的这两段代码中的HTML和CSS我是按照handsome主题制定的,使用其他主题的同学可以自己把HTML和css改一下。

以上代码仅适用于Typecho。

wordpress版本传送门:https://boke112.com/1074.html

最新版的:

最后修改:2018 年 08 月 16 日 01 : 48 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论

25 条评论

  1. 学习笔记Blog (Lv.2)

    原来原创在这里!赞一个先!OωO

    1. 梁兴健 (Lv.2)
      @学习笔记Blog

      谢谢支持!|´・ω・)ノ

  2. 旧日的足迹 (Lv.3)

    这博客折腾的越来越不像样了,真是每次进来都有意外的惊喜...

    1. 梁兴健 (Lv.2)
      @旧日的足迹

      每次不是换主题就是加功能

  3. nice (Lv.3)

    这代码,除了CSS能明白几个是干嘛,其他什么鬼东西

    1. 梁兴健 (Lv.2)
      @nice

      其实我也不怎么看的懂,反正能用就行

  4. 大事记 (Lv.4)

    这次折腾的有成就感啊

    1. 梁兴健 (Lv.2)
      @大事记

      对这次折腾挺满足的

  5. 卢松松博客 (Lv.1)

    这个功能新增也不错,会弄了多少有个成就感。

    1. 梁兴健 (Lv.2)
      @卢松松博客

      快乐正是来自于成就感

  6. 懿古今 (Lv.4)

    其实就是最新访客,加一个判断是否填写有链接地址,有就显示,没有就不显示。有这个功能感觉可以让用户更乐意评论。

    1. 梁兴健 (Lv.2)
      @懿古今

      对我这种小白,做出这个功能还是挺难的。这个功能可以让评论积极点是没错

  7. 芭比 (Lv.2)

    这个骚操作终于给你给搞出来了

    1. 梁兴健 (Lv.2)
      @芭比

      瞎搞着就出来

  8. 久伴博客 (Lv.2)

    功能不错,我就是不知道我拿过去放哪儿,不想放弃幻灯片OωO

    1. 梁兴健 (Lv.2)
      @久伴博客

      看个人喜好吧,幻灯片比这个好看多了

  9. 李峰博客 (Lv.1)

    研究了一下,代码和主题有冲突,再调试看看

    1. 梁兴健 (Lv.2)
      @李峰博客

      这个不适用于wordpress,wordpress版本传送门:https://boke112.com/1074.html

      1. 李峰博客 (Lv.1)
        @梁兴健

        试完才发现是Typecho版!!!

  10. 百万链 (Lv.1)

    有幸访问到贵站,“百万链”期待你的加入!

  11. 童年 (Lv.2)

    感觉会引起更多人参与讨论吧,毕竟相当于一个免费广告位了

    1. 梁兴健 (Lv.2)
      @童年

      这会让评论积极一点

  12. 林阿三 (Lv.2)

    挺好的

  13. 忘记了回忆 (Lv.2)

    我一直想问你代码,但知道你是花了很大的精力做的所以不好意思开口,现在你公布出来了,我就收藏了,谢谢。

    1. 梁兴健 (Lv.2)
      @忘记了回忆

      不客气|´・ω・)ノ,这个的确花了很多精力,当时两个人一起想排序问题,就是找不出解决办法,帮我写代码的那位小哥都生气了,无奈~现在我逻辑思维略微好一点了,就刚好就想到了修复排序的办法,然后我就按照自己的思路查PHP的函数,表达式,语句,一个一个套进去才弄好的。