二月
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. Johnny -#21

    劫到技术文一篇,果断扔进收藏夹妥善保管!

  2. 爱惜 -#22

    还好我的主题自带了。嘿嘿

  3. yetone -#23

    子嵌套上也弄上楼层。。。这咋整?

  4. 晨光博客 -#24

    不错,谢谢博主的分享!

  5. 何苦呢 -#25

    无限多层 没有这个需求 没什么留言

  6. tuzibeibao -#26

    能不能像 可能吧 网站的评论那样显示楼号?

  7. air nailer -#27

    还不错。。。不过WORDpress我不太懂。。。不过可能我朋友会需要骂我是帮他找的。。。

  8. hh -#28

    @QiQiBoY
    希望写歌asp版的不知道可否

  9. hyperliang -#29

    好东西呀~~~可是把代码放在哪呢?

  10. 水水 -#30

    :shock: :twisted: :razz:

  11. mirror -#31

    刚刚用上,非常感谢。

  12. vven -#32

    QiQiBoY :
    @爱惜
    你的子评论不是楼层号,是嵌套层数。。。看清楚

    如果是引用,会生成新的一级吗

  13. nini -#33

    哈哈 小清新

  14. nini -#34

    我评论的到哪里去鸟

  15. vven -#35

    我还能说话吗?

  16. vven -#36

    博主,不要不让我说话呀,我是很诚心来学习的!

  17. mr.citier -#37

    ajax运用的神奇啊,来学习学习

  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: