Typecho完美实现回复可见功能

之前转载过这么一篇文章《typecho非插件实现回复可见功能》,可以实现回复可见功能,但是有个问题,在文章列表页展示文章缩略内容时,如果回复可见内容刚好在缩略内容的位置上时,就会暴露出来,同时Feed里面也会暴露这个问题,那么如何解决呢,下面请看如何几近完美的实现回复可见功能:

步骤一
就是《typecho非插件实现回复可见功能》里面的内容

post.php中的<?php $this->content(); ?>换成

<?php
$db = Typecho_Db::get();
$sql = $db->select()->from('table.comments')
    ->where('cid = ?',$this->cid)
    ->where('mail = ?', $this->remember('mail',true))
    ->where('status = ?', 'approved')
//只有通过审核的评论才能看回复可见内容
    ->limit(1);
$result = $db->fetchAll($sql);
if($this->user->hasLogin() || $result) {
    $content = preg_replace("/\[hide\](.*?)\[\/hide\]/sm",'<div class="reply2view">$1</div>',$this->content);
}
else{
    $content = preg_replace("/\[hide\](.*?)\[\/hide\]/sm",'<div class="reply2view">此处内容需要评论回复后方可阅读。</div>',$this->content);
}
echo $content 
?>

步骤二
解决缩略内容和feed暴露问题。

functions.php中加入如下代码即可

Typecho_Plugin::factory('Widget_Abstract_Contents')->excerptEx = array('myyodux','one');
Typecho_Plugin::factory('Widget_Abstract_Contents')->contentEx = array('myyodux','one');
class myyodux {
    public static function one($con,$obj,$text)
    {
      $text = empty($text)?$con:$text;
      if(!$obj->is('single')){
      $text = preg_replace("/\[hide\](.*?)\[\/hide\]/sm",'',$text);
      }
      
               return $text;
}
}

就是用插件接口,在缩略内容输出之前,隐藏掉或者替换掉回复可见内容,同时使用if判断,来针对非single页面进行隐藏。

步骤三
使用方法

在写文章需要隐藏部分内容时用以下写法(去掉@)

[@hide]要隐藏的内容[/hide]

css参考样式

.reply2view {
    background:#f8f8f8;
    padding:10px 10px 10px 40px;
    position:relative
}

心里话
在写yodu模板的时候,因为网友需要,我就找了教程把回复可见功能加上了,当时也是知道这个东西的bug,但是自己不会修,最近写了个typecho的搜索插件,看了一些typecho的插件接口和源码,发现用插件接口很好的就能解决了,于是乎水文一下,希望能帮助到一些人。

已有 26 条评论
  1. AppleMiku

    学习学习!谷歌广告老显示违规,以后把这个搞上去

    1. 泽泽社长

      AppleMiku 我也有几篇文章显示违规

      1. AppleMiku

        泽泽社长 很好奇,其实不管它会咋样的?没事的把

        1. 泽泽社长

          AppleMiku 没事,就是被判定违规的页面不会显示广告了

  2. hpkaiq

    厉害了,已用并转载,如果博主不希望被转载,请回复下,谢谢博主的教程。

    1. 泽泽社长

      hpkaiq 可以转载,注明原文地址就行

  3. buxia

    真的太给力了

  4. xxyangyoulin

    好好好!good job!

  5. share1223

    已经用上了 想问一下 回复可见 有些人就发乱七八糟的内容 不知道能否实现 评论审核通过后 能看到内容现在是不管你审核不审核 只要回复就能看见了 之后的更新 希望能解决这个问题

    1. 泽泽社长

      share1223 感谢反馈,代码已经改好了,只有审核过的评论才能看

      1. share1223

        泽泽社长 谢谢!真棒!

    2. 皮皮

      share1223 只可说这功能的缺憾,带来无数垃圾留言

  6. share1223

    typecho昵称怎么限制字数 谢谢大佬

      1. share1223

        Jrotty 谢谢,大佬么么哒。