typecho 过滤侧边栏中的评论内容或者添加表情解析等
1年前
为什么要过滤侧边栏评论内容?
例如:你的模板中有个私密功能,有网友使用该功能后侧边栏去能看见私密的内容这就非常不符合私密这个功能。这时候就需要通过过滤去掉相关部分内容。
理论上来说可以通过插件的接口进行过滤操作,由于本人懒就没有找这方面的代码。
/**
* @description: 获取文章摘要
* @param {*} $that 文章对象
* @param {*} $maxLength 最大长度
* @param {*} $a 是否开启表情解析
* @param {*} $b 是否开启过滤模式
* @param {*} $c 判断开启那种模式过滤
* @Date: 2023-03-25 00:12:20
* @Author: mulingyuer
*/
function getArticleSummary($that, $maxLength = 120,$a = true,$b = false,$c = true)
{
//不建议在这里使用短代码解析,否者后面截取的内容会出现各种问题
$content = $that->content;
$abstract = Typecho_Common::fixHtml(Typecho_Common::subStr($content, 0, $maxLength, "..."));
if (empty($abstract)) {
$abstract = '';
}
$abstract = preg_replace('/<(.+?)>(.+?)<\/(.+?)>/',"$2", $abstract);
$abstract = preg_replace('/<(.+?)>(.+?)/',"$2", $abstract);
if ($a === true){
//注意这里是解析表情操作,如果要使用需要自行替换成相关模板中代码
$abstract = self::biaoqing(htmlspecialchars($abstract));
}else{
$abstract = htmlspecialchars($abstract);
}
//判断是否启用过滤模式
if ($b === true){
//过滤评论ubb代码,反之过滤文章ubb代码
if ($c === true){
//关于下面如果要做多重判断,由于有点时候所截取的内容中短代码标签不完整,所以遇到短代码不完整的情况宁愿错误过滤,也不要放过。
if (strpos($abstract, '{secret') !== false) {
if (strpos($abstract, '{/secret') !== false) {
$abstract = preg_replace("/{secret}(.+?){\/secret}/sm",'嘿嘿,这是一条私密评论。',$abstract);
}else{
$abstract = preg_replace("/{secret}(.*)/sm",'嘿嘿,这是一条私密评论。',$abstract);
}
}
}
}
return $abstract;
}
侧边栏评论使用方法
<?php \Widget\Comments\Recent::alloc()->to($comments); ?>
<?php while ($comments->next()): ?>
<a href="<?php $comments->permalink(); ?>" class="lq-sideA lq-txt-ellipsis"><?php echo getArticleSummary($comments,35,true,true); ?>
</a>
<?php endwhile; ?>