Typecho完美实现回复可见功能

Typecho教程 typecho php 回复可见 正则 2018-12-23

之前转载过这么一篇文章《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的插件接口和源码,发现用插件接口很好的就能解决了,于是乎水文一下,希望能帮助到一些人。

45条评论

    依晨博客

    这个好像电脑不适应,我用电脑看那个直接显示出来了

    游客 安卓派 23天前回复

    TsriGero

    我博客设置了这个确实改观了不少,但是我最近发现有人就回复“1111”“121212”“23333”这些玩意,要怎么解决呀????求助一下

    游客 Windows10 56天前回复

      泽泽社长
      @TsriGero

      可以使用评论过滤插件缓解下https://qqdie.com/archives/smartspam-plugin.html

      作者 MacOS 56天前回复

        依晨博客
        @泽泽社长

        电脑不适应怎么搞啊,我在电脑上面看能直接看到隐藏的文字

        游客 安卓派 23天前回复

          泽泽社长
          @依晨博客

          跟电不电脑没关系,这个原理就是php替换模板文章输出的内容,理论上你代码写对了就不会出现问题,除非你手机和电脑用的不是同一个模板

          作者 Windows7 23天前回复

    TsriGero

    有插件吗,跟着这个做模板直接鬼畜了。

    游客 WindowsVista 69天前回复

      泽泽社长
      @TsriGero

      应该没有吧,如果不熟悉模板代码不建议弄

      作者 MacOS 69天前回复

        TsriGero
        @泽泽社长

        这个“回复可见”必须注册以后回复才行吗?

        游客 WindowsVista 69天前回复

          泽泽社长
          @TsriGero

          不是的,游客评论也可以,也可以自行修改成登陆用户回复才行

          作者 MacOS 69天前回复

            TsriGero
            @泽泽社长

            测试了一下,必须要填写邮箱才有用。

            游客 WindowsVista 69天前回复

              泽泽社长
              @TsriGero

              因为游客评论没有用户id,所以如果需要判断依据只能用邮箱

              作者 MacOS 69天前回复

        TsriGero
        @泽泽社长

        你已回复我就成功了

        游客 WindowsVista 69天前回复

    惜离云博客

    我的模板是Aria,为什么用不了

    游客 安卓棒棒糖 113天前回复

      泽泽社长
      @惜离云博客

      教程没有错,你自己检查下看看哪里写的不对吧

      作者 Windows7 113天前回复

        惜离云博客
        @泽泽社长

        我全部按教程写了,但是就是不隐藏

        游客 安卓棒棒糖 113天前回复

          泽泽社长
          @惜离云博客

          那就不知道了,搜搜别人的教程吧

          作者 Windows7 113天前回复

            惜离云博客
            @泽泽社长

            全都一样,是不是模板不支持啊

            游客 安卓棒棒糖 113天前回复

              泽泽社长
              @惜离云博客

              不知道,常规模板这么改都可以的,你换个模板试试!

              作者 Windows7 113天前回复

                惜离云博客
                @泽泽社长

                哦,那谢谢了,我看看默认模板行不行

                游客 安卓棒棒糖 113天前回复

    AppleMiku

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

    游客 Windows10 171天前回复

      泽泽社长
      @AppleMiku

      我也有几篇文章显示违规

      作者 安卓牛轧糖 170天前回复

        AppleMiku
        @泽泽社长

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

        游客 Windows10 170天前回复

          泽泽社长
          @AppleMiku

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

          作者 安卓牛轧糖 170天前回复

    hpkaiq

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

    游客 MacOS 215天前回复

      泽泽社长
      @hpkaiq

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

      作者 Windows7 215天前回复

    buxia

    真的太给力了

    游客 Windows7 248天前回复

    xxyangyoulin

    好好好!good job!

    游客 MacOS 254天前回复

    share1223

    已经用上了 想问一下 回复可见 有些人就发乱七八糟的内容 不知道能否实现 评论审核通过后 能看到内容

    现在是不管你审核不审核 只要回复就能看见了 之后的更新 希望能解决这个问题

    游客 Windows7 269天前回复

      泽泽社长
      @share1223

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

      作者 Windows7 183天前回复

        share1223
        @泽泽社长

        谢谢!真棒!

        游客 Windows7 181天前回复

      皮皮
      @share1223

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

      游客 Windows10 201天前回复

    share1223

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

    游客 Windows7 272天前回复

      Jrotty
      @share1223

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

      作者 Windows7 270天前回复

        share1223
        @Jrotty

        谢谢,大佬么么哒。

        游客 Windows7 270天前回复

智能推荐