menu ZigZagK的博客
account_circle

正在努力加载中QAQ

Typecho输出评论骚操作
apps Typecho
local_offer 查看标签
comment 2 条评论

可能是没啥用的骚操作QAQ。

突发奇想

在编写日记页面的时候我发现由于$comments->listComments();自身的特性,输出的评论会被<ol class="comment-list"></ol>包起来,导致有些时候会很麻烦。因此我搜了一下能不能去掉这个东西,结果当然是……啥都没搜到。

实在没办法,我就去看了源码,发现listComments()其实是可以加参数的QAQ……

骚操作1

默认参数长这样:

$this->_singleCommentOptions->setDefault(array(
    'before'        =>  '<ol class="comment-list">',
    'after'         =>  '</ol>',
    'beforeAuthor'  =>  '',
    'afterAuthor'   =>  '',
    'beforeDate'    =>  '',
    'afterDate'     =>  '',
    'dateFormat'    =>  $this->options->commentDateFormat,
    'replyWord'     =>  _t('回复'),
    'commentStatus' =>  _t('您的评论正等待审核!'),
    'avatarSize'    =>  32,
    'defaultAvatar' =>  NULL
));

这些参数其实都很熟悉……很明显<ol class="comment-list"></ol>的罪魁祸首就是beforeafter

所以只要这样就可以把外层套着的东西去掉啦:

$comments->listComments(array('before'=>'','after'=>''));

骚操作2

由于想要实现日记按月归档的功能,我需要把所有评论先拿出来再输出。

到网上搜了一下,发现方法千篇一律……都是直接从数据库中拿出评论。然而这样是没法拿到解析之后的评论的(评论是可以支持Markdown的),表情解析就更加不行了。

这时候我忽然想到一个骚操作QAQ,我在评论输出的函数中,不输出评论,而是存到另外的数组里,就可以避免调用数据库,还可以得到解析后的评论了!

<?php global $total;global $diary;$total=0; ?> //全局变量
<?php function threadedComments($comments, $options){
$GLOBALS['diary'][$GLOBALS['total']][0]=$comments->date; //用于之后的归档
$GLOBALS['diary'][$GLOBALS['total']][1]='
<div class="mdui-col">
    <div id="'.$comments->theId.'" class="mdui-card mdui-m-t-2">
        <div class="mdui-card-header">
            <img class="mdui-card-header-avatar" src="https://cdn.v2ex.com/gravatar/'.HashTheMail($comments->mail).'?s=100&r=&d=mystery" />
            <div class="mdui-card-header-title">'.$comments->author.'</div>
            <div class="mdui-card-header-subtitle">'.$comments->date->format(Helper::options()->commentDateFormat).'</div>
            //不能用$comments->date(),会直接输出
        </div>
        <div class="mdui-card-content" style="min-height:200px">'.RewriteComment($comments).'</div>
        //RewriteComment是MDUI2333中用来进一步解析评论的函数
    </div>
</div>'; //把评论字符串存到数组里而不是直接输出
$GLOBALS['total']++;
} ?>

为了在函数中调用外部的数组,需要使用全局变量,具体定义和使用方法可以到网上搜一下QAQ(我PHP水平这么菜这个当然是搜的)

结合下骚操作1,调用一下:

$comments->listComments(array('before'=>'','after'=>''));

就可以不留痕迹的获取到评论数组啦。

版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!
名称不能为空
email
邮箱不能为空,请填写正确格式
link
网址请用http://或https://开头
message
评论不能为空
资瓷Markdown和LaTeX数学公式
sentiment_very_satisfied
    2019-12-08 15:12:14ohmyga
    keyboard_arrow_down
    2019-12-08 15:12:14

    zigzagk nb

    remove_red_eye访客
      2019-12-08 22:28:50ZigZagK
      keyboard_arrow_down
      2019-12-08 22:28:50
      @ohmyga 

      并不啊

      account_circle
      博主
keyboard_arrow_up