从 Typecho 的源码初探自定义评论结构

2021-01-20 21:33:00
 尚寂新

当百度搜索到的答案已经不能完全满足于自己清晰的理解下,读源码就成了一个很奈斯的方式。当初也是被自定义评论结构这东西折腾的挺惨的,当初官方那 Wiki 上的内容还是错的,所以只能照着别的dalao的方案进行操作,但现在的话...发现其实如果想看源码的话,也挺简单。

相关位置

/var/Widget/Comments/Archive.php#L76

    /**
     * 评论回调函数
     * 
     * @access private
     * @return void
     */
    private function threadedCommentsCallback()
    {
        //相关内容
    }

没错,这个就是threadedComments的回调函数。映入眼帘的内容就已经十分清晰了,完全懂的人估计现在已经可以点×推出去了。直接在comments.php里重新声明一个threadedComments的 function 就可以参照着上面的东西进行玩耍了。

可以精简它

<?php function threadedComments($comments, $options) { ?>
<!-- 自定义评论结构你想要的HTML -->

<?php if ($comments->children) { ?>
<div class="comment-children"><!-- 这个是调用子评论的 -->
    <?php $comments->threadedComments($options); ?>
</div>
<?php } ?>

<?php } ?>

这,就是我要说的重点。如果也有像我一样做的老哥,把评论嵌套给取消掉了,直接评论不分父子关系展示(但实际上父子关系仍旧存在),那这样去精简自定义评论结构的话,那接下来的最简,直接就...

<?php function threadedComments($comments, $options) { ?>
<!-- 自定义评论结构你想要的HTML -->
<?php } ?>

中间任意的写评论输出循环体的 HTML 格式,然后看上面说的那个 Callback 函数里支持什么样的输出的调用,就往里套,

$this等效为$comments(这个是肯定的),把$singleCommentOptions等效为$options(后者存疑),就有了,是不是很奈斯啊🤪

可以从此处进行寻找(完整的到Te官方的仓库里看)
可以从此处进行寻找(完整的到Te官方的仓库里看)

翻一翻那个回调,其实你会发现很多Te的原生的方便你的东西,还有一些从现在都不知道有何功用的东西(如$singleCommentOptions->beforeAuthor();和各自对应的after,坐等dalao解释)

还有很多人心心念念的评论审核提示语,也安安静静的待在L112-L114等着有人去复制粘贴

然后那个singleCommentOptions应该是对应着上面那个形参options(估计是options这个已经是口口相传了,其实应该是singleCommentOptions,此处存疑)

还有Te原生的相关设置,如头像$this->gravatar($singleCommentOptions->avatarSize, $singleCommentOptions->defaultAvatar);这个写法,是可以在博客设置(不是主题设置)里的评论栏里可以控制的(根本不依赖主题设置面板)

还有<?php $this->date($singleCommentOptions->dateFormat); ?>也是可以跟着站点设置走时间格式的。

其实像这样的事情会发生很多,只要有耐心去看,也许发现的会更多~