Typecho如何实现评论无限嵌套
AI摘要:Typecho默认限制评论嵌套层级在2到7层,后台设置无效。通过修改源码或主题配置可突破此限制。在主题的`functions.php`中添加配置项,并在`themeInit`函数中读取设置,实现自定义评论嵌套层级,提升用户体验。
今天有朋友在我的博客上留言,询问有关插件的一些问题。起初我正常回复,但回复到第五层时发现已无法继续,于是便进入后台打算进行设置。
哎,我觉得设置9层,基本上应该可以了吧,结果保存了一下,变成了7……
我去,我博客系统有问题?感觉应该不是我主题的问题,那就先看看 Typecho 源码,发现在 Typecho 中 var/Widget/Options/Discussion.php 源码中有这么一句
$settings['commentsMaxNestingLevels'] = min(7, max(2, intval($settings['commentsMaxNestingLevels'])));这行代码强制将评论嵌套层级限制在 2 到 7 之间 ,无论用户在后台设置什么值。这是 Typecho 系统的一个硬编码限制,目的是:
- 防止评论嵌套层级过深导致页面布局混乱
- 保持良好的用户体验和可读性
但是既然后台设置已经给用户了,为啥还要这么硬编码限制,有可能是评论这块真的嵌套太深导致的性能问题?
然后搜了一下,发现有人也遇到这个问题了:
function themeInit($archive) {
Helper::options()->commentsMaxNestingLevels = 9;
}赶紧粘贴上去,试试看,果然生效了,虽然后台设置那里还是显示7,但是目前最多可以开启到9。但是这种硬编码在代码中还是不方便,万一哪天想增加还是需要修改代码,于是还是把这个加入到主题的配置中更方便一些
在主题的 functions.php 中,找到 themeConfig 函数,在里面增加如下代码:
// 评论层级设置
$commentsNestingLevels = new Typecho_Widget_Helper_Form_Element_Text('commentsNestingLevels', NULL, '5', _t('评论层级限制'), _t('设置评论嵌套的最大层级,默认为5级'));
$form->addInput($commentsNestingLevels);然后在 themeInit 这个函数中增加:
// 从主题设置中获取评论层级限制,默认为5
$options = Helper::options();
$commentsNestingLevels = $options->commentsNestingLevels ? intval($options->commentsNestingLevels) : 5;
Helper::options()->commentsMaxNestingLevels = $commentsNestingLevels;配置完,效果就是这样的
这样又可以愉快的评论了,不管还是那句,嵌套太深展示效果就不太好了,还是避免一下。如果9层都没讨论清楚,我觉得还是邮件沟通比较方便了。





小博客,又不是很多人的论坛,2层都足够了
一般没多少在评论里面讨论的,有问题发邮件方便
能聊7层就加个v吧 🙂
V还没分层了,那不是更不清楚了哈哈哈
就是出现问题了,帮忙解决问题,正常聊,估计5层都费劲……
折腾得历害啊。
没办法,评论层级第一次刷了这么多,才发现这个问题,后面能用邮箱还是用邮箱吧…
一般的五层差不多啦,太多了又要做叠起,还是限制五层完事儿
是的,但是保不齐有人一直回复。
佛语有云“九九归一、终成正果”,在这里“九”是最大的,也是终极的,所以我就限制九是最大的嵌套层级。
无线嵌套,,,听着好像网络攻击啊。 另外你的评论系统点击评论然后就没有了,也不知道评论成功了没有,哈哈。
最原始的表单提交,网站开启了10分钟左右的缓存,后面我改改缓存规则
这种情况,建议直接QQ联系了(°ー°〃),毕竟邮箱看得少
我QQ用的少,基本上都是用邮箱