从 Typecho 的源码初探自定义评论结构
当百度搜索到的答案已经不能完全满足于自己清晰的理解下,读源码就成了一个很奈斯的方式。当初也是被自定义评论结构这东西折腾的挺惨的,当初官方那 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的原生的方便你的东西,还有一些从现在都不知道有何功用的东西(如$singleCommentOptions->beforeAuthor();
和各自对应的after,坐等dalao解释)
还有很多人心心念念的评论审核提示语,也安安静静的待在L112-L114等着有人去复制粘贴
然后那个singleCommentOptions
应该是对应着上面那个形参options
(估计是options这个已经是口口相传了,其实应该是singleCommentOptions,此处存疑)
还有Te原生的相关设置,如头像$this->gravatar($singleCommentOptions->avatarSize, $singleCommentOptions->defaultAvatar);
这个写法,是可以在博客设置(不是主题设置)里的评论栏里可以控制的(根本不依赖主题设置面板)
还有<?php $this->date($singleCommentOptions->dateFormat); ?>
也是可以跟着站点设置走时间格式的。
其实像这样的事情会发生很多,只要有耐心去看,也许发现的会更多~
你好,我用了你的那个JiWater 模板,在发布图片时候发现图片会发布成为完整的尺寸显示,如何设置自动适应尺寸呢
抱歉,这个主题已经不进行维护了![@[痛饮]](/usr/uploads/emotions/55eb6aWu.png)
好吧,谢谢,刚刚弄了下pc显示可以 手机上看,还是不行![@[卖萌]](/usr/uploads/emotions/5Y2W6JCM.png)
![@[卖萌]](/usr/uploads/emotions/5Y2W6JCM.png)
$singleCommentOptions->beforeAuthor();
就是评论者名字签名要显示的内容,对应的还有$singleCommentOptions->afterAuthor();
,不使用threadedComments
函数自定义评论列表时,而是使用listComments
简单定义评论列表时才能进行设置,详见源码var/Widget/Comments/Archive.php
399行,也可参考这个https://github.com/jrotty/Shamiko/blob/master/comments.php