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层都没讨论清楚,我觉得还是邮件沟通比较方便了。




