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))
    ->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的插件接口和源码,发现用插件接口很好的就能解决了,于是乎水文一下,希望能帮助到一些人。

发表新评论
已有 19 条评论
  1. hpkaiq
    hpkaiq
    回复

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

    1. 泽泽社长
      泽泽社长本文作者
      回复

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

  2. buxia
    buxia
    回复

    真的太给力了

  3. xxyangyoulin
    xxyangyoulin
    回复

    好好好!good job!

  4. share1223
    share1223
    回复

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

  5. share1223
    share1223
    回复

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

    1. Jrotty
      Jrotty本文作者
      回复

      @share1223 我记得这个插件可以限制http://www.yovisun.com/archive/typecho-plugin-smartspam.html

      1. share1223
        share1223
        回复

        @Jrotty 谢谢,大佬么么哒。

  6. JIElive
    JIElive
    回复

    主题竟然也能用插件的接口,刚知道,那岂不是无敌了,我要试试去(⊙o⊙)

    1. Jrotty
      Jrotty本文作者
      回复

      @JIElive 有些插件接口也不能用,或者是我用法不对233