前几天逛博客,看到的博客评论是那种回复一次,回复内容就在下面显示出来,也就是俗称的“盖楼式评论”。像下面的样式:
我的博客的评论,我之前开发这个评论的时候,偷了一个懒,直接把回复评论添加一条新的数据,并附带把上级评论内容也再保存一份到一张表里。
这样有一个好处就是,所有的评论跟普通文章序列一样,按评论iD查询,再直接显示出来就好了。就像下面这样:
这样的样式不但丑,而且还多占数据空间,随着同一条评论回复得越多,后期追加的原评论数据就越多。
于是,做好心理准备之后,搬来我的小板凳,我就开始了一天多的评论系统重构工作。
因为原评论模块的调用方式和后来我要实现的完全不一样,于是就想着重写一个评论模块,但没成想,这个模块太绕了。
想着是,每一条父级评论,如果有子评论,循环调出来就完事,结果完全不是这么个情况。
父级下面的子评论,可能id是跨越的,下一条可能是别的父级下的子评论,总之是一堆问题,我一时半会没想明白怎么弄。
我去参考Zblog官方的评论样式输出,发现我根本用不上,又去网上查。
最后找到了一个思路,就是直接用递归函数的方式去查,好嘛,几行查询就直接搞定子父级关系了。
终于在昨天凌晨的时候,完成了评论基本逻辑实现。
下午的时候,把这个逻辑代码重写了一个方法,按博客原本的数据去调用测试。
结果又发现一个硬伤:不能现实分页。
没办法,又去查Zblog的评论,好家伙,Zblog最新版本的博文评论,居然是没分页的(我测试了20条都没有),这我不能忍受呀。
我想着如果我的某一篇博文评论非常多,那页面显示也会非常长,加载也会变慢一些,当然,想象归想象,要做还得做“完美”些。
于是我又重写了刚写的递归函数,结果我发现直接用Limit去查数据库做分页,根本不行,普通的数据可以这么做,但这种评论是有子父级关系的。
比如每个页面显示10条,如果第10条下面刚好有3条子评论,不能把这3条子评论(回复)分开到第二页去呀。
基于这么一个情况,就只好一个递归函数不够用,那就再来一个。
一个递归函数是把数据从数据库里出来的,按评论子父级进行重组为新的多维数组。
另一个递归函数,是把这些函数按分页的形式进行截取,也就是只按多维数组中的第一列数据进行取整。
最后完美现实了分页,这样每个Page下可以显示10条,如果只是数评论数,可能是11,也可能更多。
评论及评论分页,大概是这么个情况,很烧脑,一把年纪了,敲代码着实不易。
通过递归函数,就调出这么个多维数组。
接着就是显示 “楼层”数了,这个楼层数不能按每个页面显示出来的数据量显示,要在总评论数里计算楼层,同时只显示每个有子父级评论的第一列数组。
不说了,不说了,太绕了,这个楼层显示还是有些问题,以后有时间再修复。
接下来就是把原有的评论提交方式再修改下,在邮件回复的时候,需要截取的字段修改下,把
真是牵一发而动全身,以后再也不这么干了,除非这个博客有别的需要重大升级的模块。
参考资料:
赏