二月
02

WordPress技术: 无限多级楼层显示

wordpress评论分为悬浮@回复和嵌套回复。前者显示楼层容易,一层一层累计下来就行,而后者则麻烦了些,因为如果也一层层按时间顺序累计,那么嵌套的子评论往往会打乱评论的楼层。所以大家普遍采用主评论楼层显示。我曾经也写了一篇关于主评论楼层显示的文章《wordpress指定页面评论数+支持分页的楼层显示》。

现在对这个主评论楼层进行了改进,支持了子评论楼层。


什么意思呢?

其实就是说每个评论的直接子评论(不包括孙子评论)当做一个楼层计数系统。

比如有一条评论A,有八条回复此评论的子评论(B1到B8),那么这八条评论就按照时间·顺序从1开始累计楼层。如果还有其它评论是对这八条评论的回复(即这八条评论的直接子评论,即A的孙子评论),那么他们也按照他们各自的父级评论从1开始排序。如下图所示:楼层显示

正如图所示,具体的实例,大家可以到这个地址查看,请看仔细些:

多级无限楼层数展示

实现代码

其实实现思路还是原来那种主评论显示方法。主评论显示我们在wp的评论自定义显示调用函数中使用一个全局变量来存储楼层数(分页楼层的计算我这里就不说了,我以前的那篇文章里讲有,很多博友也写过)。

我这里的多级楼层其实也还是使用一个全局变量,只不过这个变量的类型变了,不是一个整型,而是一个数组。同样的我们要在函数里开头部分先声明引入全局变量$comemntcount:

global $commentcount;

然后是初始化,其实就是检测下这个变量有无定义:

$max_depth=$args['max_depth'];//获得设置的最大嵌套数
if(!$commentcount) {
    $commentcount = array();//声明为数组
    $pagenum=get_query_var('cpage')-1;//获得当前分页(减一是为了后面计算使用)
    $page_comment_count=get_option('comments_per_page');//获得设置的每页评论数
    $commentcount[0] = $pagenum * $page_comment_count;//$commentcount的第一个元素存入计算得出的前面分页的评论数目
    $commentcount[$max_depth]=0;//这里$commentcount[$max_depth]是用数组的最后一个存储上个评论的楼层数,这里初始置为0
}

上面最后一行用到了$commenntcount[$max_depth],我们要用$commentcount数组存储每一层测楼层计数,所以最后一层,即$commenntcount[$max_depth]来存储上一条评论的楼层数,因为我们下面要用到它,来判断是否需要重置相应楼层对应的计数器。

<span class="comment-meta">//我以楼层输出处为例,介绍下后续的处理
    //$depth为当前打印的评论的楼层数,$commentcount[$depth-1]即为此楼层对应的计数器,如果不存在就置为1,否则就+1
    <?php if(!$commentcount[$depth-1])$commentcount[$depth-1]=1;else $commentcount[$depth-1]++;
        $floor = '#'.$commentcount[$depth-1];
        //输出楼层显示
        echo '<a href="' . htmlspecialchars( get_comment_link( $comment->comment_ID ) ) . '">' . $floor . '</a>';
        /* 下面就是重点了,$commentcount[$max_depth]里存储上个评论的嵌套层数,如果上个评论所在层数大于当前评论的层数,说明
            当前评论时更高一级评论,所以要重置低级层数的评论的=计数器 */
        if($commentcount[$max_depth]&&$commentcount[$max_depth]>$depth){
                for ($i=$depth;$i<$max_depth;$i++){//利用循环将低级的计数器都置为0
                    $commentcount[$i]=0;
                }
        }
        $commentcount[$max_depth]=$depth;//将当前评论层数赋给$commentcount[$max_depth]
    ?>
</span>

OK,到此就介绍完了,说的比较混乱,大家凑活着看。多级楼层支持任意嵌套层数。

也许还有人不明白何为多级嵌套层数,不明白的同学可以尽情在此篇文章下尽情灌水,尽情嵌套,来观察不同嵌套层数的楼层的变化。

本文标签: , , , ,

分享

本文短网址: http://qiqi.boy.im/af

这篇文章已经有 61 条评论

Comments (61) Trackbacks (0)
You can leave a response or Trackback this entry .
  1. liuqiqi -#1

    美美的沙发。。。 :razz:

  2. snowxh -#2

    新主题不适应啊!

  3. QiQiBoY -#3

    @snowxh
    诶。。嘿。。你咋不好好看春晚呢。。。 :razz:

  4. winy -#4

    大过年的发技术文, :mad: 回头再看,新年快乐,闪人

  5. Veezy -#5

    技术琪 = =
    搭车祝个春节快乐~

  6. 老曦 -#6

    学习了!过完年测试!
    祝兔年吉祥!新年快乐!!顺颂健康!

  7. Bee君 -#7

    大年初一,技术文?Σ(⊙▽⊙”a…

    兔兔年快乐!

  8. chnmcy -#8

    新年快乐 恭喜发财

  9. MOPVHS -#9

    直接扔进收藏夹…兔年晚安~~~

  10. 老王 -#10

    话说我没看懂呢, :grin:

  11. Maplews -#11

    看不太懂。干脆先收藏了~

  12. Ray Chow -#12

    偶不显示楼层~

  13. Suyos -#13

    我那里也用不了很多层了。

  14. 韩国 -#14

    今天初一,给博主拜年了。过年好。

  15. 万戈 -#15

    过年不看代码,先藏下了,主题上还正缺点啥,就拿这个填上吧,嘿嘿

  16. wmtimes -#16

    很精彩的内容啊,学习了。

  17. wmtimes -#17

    很精彩的内容啊,学习了。前面地址写错了。

  18. szoorz -#18

    好多“-”这个,用颜色区分应该好点儿吧,,,兔年好!如意如意!

  19. A.shun -#19

    新年快乐
    我是来看 banner的

  20. mice -#20

    围观新主题.

  1. No trackbacks yet.

Leave a Reply

Hi , say something.

  • :?:
  • :razz:
  • :sad:
  • :evil:
  • :!:
  • :smile:
  • :oops:
  • :grin:
  • :eek:
  • :shock:
  • :???:
  • :cool:
  • :lol:
  • :mad:
  • :twisted:
  • :roll:
  • :wink:
  • :idea:
  • :arrow:
  • :neutral:
  • :cry:
  • :mrgreen: