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

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

突发奇想

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

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

骚操作1

默认参数长这样:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
$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

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

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

骚操作2

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

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

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
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,调用一下:

  • 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 

并不啊

博主
本文写于 1944 天前,最后更新于 889 天前。
部分信息可能已经过时,博主也可能已经无法对其内容进行解答。
OK