ZigZagK的博客
Typecho输出评论骚操作
2019年12月8日 00:07
Typecho
查看标签

可能是没啥用的骚操作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,我在评论输出的函数中,不输出评论,而是存到另外的数组里,就可以避免调用数据库,还可以得到解析后的评论了!

Helper::options()->commentsPageBreak=false; //当前页评论不分页,从而获取所有评论
global $total;global $diary;$total=0; //全局变量
function threadedComments($comment,$options){
    $GLOBALS['diary'][$GLOBALS['total']][0]=$comment->date; //用于之后的归档
    $GLOBALS['diary'][$GLOBALS['total']][1]='
    <div class="mdui-col">
        <div id="'.$comment->theId.'" class="mdui-card mdui-m-t-2">
            <div class="mdui-card-header">
                <img class="mdui-card-header-avatar" src="'.GravatarURL($comment->mail,100).'" />
                <div class="mdui-card-header-title">'.$comment->author.'</div>
                <div class="mdui-card-header-subtitle">'.$comment->date->format(Helper::options()->commentDateFormat).'</div>
            </div>
            <div class="mdui-card-content" style="min-height:200px">'.RewriteComment($comment).'</div>
        </div>
    </div>'; //把评论字符串存到数组里而不是直接输出
    $GLOBALS['total']++;
}

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

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

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

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

版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!
请不要发毫无意义或内容不文明的评论。与本文无关评论请发留言板!
2022-10-28 01:00:24枫叶
2022-10-28 01:00:24

想问下怎么用关键词来获取相应的评论,然后进行前端输出。比如搜“#生活日记”相关的评论。。。 🤔

访客
2022-10-28 01:22:54ZigZagK
2022-10-28 01:22:54
@枫叶 

Typecho自带的功能应该实现不了,估计得直接查询数据库

博主
2022-10-28 17:06:01枫叶
2022-10-28 17:06:01
@ZigZagK 

我直接用typecho api插件,用js把需求撸了出来。就是不知道json api带参数怎么才能给某篇文章的所有评论都获取到,默认的是获取第一页的。

访客
2022-10-28 19:00:20ZigZagK
2022-10-28 19:00:20
@枫叶 

这我就不太清楚了,主要好久没有维护博客,可能提供不了更多帮助了,抱歉 倍感压力

博主
xxx
2021-08-13 17:44:23xxx
2021-08-13 17:44:23

大佬,添加文章输入自定义字段的内容怎么变成数组在前端读取呢?就比如[1,2,3,4]

访客
2021-08-13 17:47:35ZigZagK
2021-08-13 17:47:35
@xxx 

前端想要读取后端的数据一般得写api,然后用ajax在前端获取

博主
xxx
2021-08-13 17:50:53xxx
2021-08-13 17:50:53
@ZigZagK 

那有没有办法把自定义字段的STR转成数组形式

访客
2021-08-13 17:52:54ZigZagK
2021-08-13 17:52:54
@xxx 

不是很清楚哎,可能得看Typecho文档

博主
xxx
2021-08-13 18:06:31xxx
2021-08-13 18:06:31
@ZigZagK 

或者有没有其他骚操作

访客
2021-08-03 14:11:43SkyWT
2021-08-03 14:11:43

ZZK 大佬太强啦!!刚遇到这个问题,一搜就是大佬的博客 👍

访客
2021-08-03 22:18:18ZigZagK
2021-08-03 22:18:18
@SkyWT 

竟然能百度搜到,泪目了 😭

博主
2020-04-21 18:52:34Ryan
2020-04-21 18:52:34

所有数据库查出来的数据,如果typecho有原生对应类可以直接使用filter函数过滤一下,然后就是处理过的数据什么,比如拼接好的slug,解析完的content

访客
2020-04-21 22:19:16ZigZagK
2020-04-21 22:19:16
@Ryan 

这个我不是很懂唉 倍感压力
主要是typecho官方文档极其不详细,所以我就脑补了一个解决方案出来

博主
2020-11-11 23:11:06zizdog
2020-11-11 23:11:06
@ZigZagK 

脑洞还是可以的

访客
2019-12-08 15:12:14ohmyga
2019-12-08 15:12:14

zigzagk nb

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

并不啊

博主