Typecho 文档:评论置顶功能(类完美版)
适用程序:Typecho
敬告:此文档操作涉及程序核心文件的修改,作者不对你在使用中产生的任何问题造成的不良后果,承担责任。
文档说明
在给 Snapic Plus v5 相册主题新增置顶文章功能时,了解到了 Typecho 对文章列表和评论列表的处理机制,这也是之前为什么无法把评论在列表里全局置顶,只能在该评论所处分页下置顶的原因。于是乎,在时隔一年后,再次折腾起评论置顶。相较于插件 Lopwon Pin 和另一篇文档,本文档介绍的方法可以较为完美的实现评论置顶,包含其所属的子评论,还不用动数据库。
主要功能
- 在后台主题设置里,自定义需要置顶的评论,将在各自的评论列表里置顶显示。
- 同一 cid 下,可以单条评论置顶也可以多条,父级评论下的子级评论也会同时置顶。
- 置顶评论沿用自己主题的评论样式。
使用方法
涉及文件
var/Widget/Comments/Archive.php
usr/themes/***/functions.php
改造文件
作用:新增评论置顶功能。
打开文件
var/Widget/Comments/Archive.php
替换一处、新增两处代码:搜索找到以下代码:
$outputComments[$coid] = $comment;
将以上代码替换为以下代码:
$pinchatOpt = $this->options->pinchat; if (!empty($pinchatOpt)) { $pinchatCoid = explode(',', $pinchatOpt); $pinchatCoid = array_map('trim', $pinchatCoid); $pinchatCoid = array_unique($pinchatCoid); if (in_array($comment['coid'], $pinchatCoid)) { if (0 != $parent && isset($this->stack[$parent])) { $comment['parent'] = $parent; $this->threadedComments[$parent][$coid] = $comment; } else { $pinchat[$coid] = $comment; } } else { $outputComments[$coid] = $comment; } } else { $outputComments[$coid] = $comment; }
搜索找到以下代码:
$outputComments = [];
在以上代码的上一行(或下一行)添加以下代码:
$pinchat = [];
搜索找到以下代码:
$this->stack = $outputComments;
在以上代码的上一行添加以下代码:
$outputComments = array_merge($outputComments, $pinchat); // 如果评论是以(较旧的)显示在前面,则将 $pinchat 和 $outputComments 对调位置
打开文件
usr/themes/***/functions.php
创建用于自定义置顶评论的表单,在函数themeConfig()
里添加以下代码:$pinchat = new Typecho_Widget_Helper_Form_Element_Text( 'pinchat', NULL, NULL, _t('置顶评论'), _t(' 1. 填入需要置顶的评论 coid 多个以半角逗号隔开,将在各自的评论列表里置顶显示。<br> 2. 仅限填入父级评论的 coid 其下的子级评论也会一并置顶。 '), ); $form->addInput($pinchat);
至此,已完成评论置顶功能,进入主题设置里找到(置顶评论)按需设置,即可。