QQ爹博客 QQ爹博客

Typecho完美实现回复可见功能

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

谷歌广告
jrotty WeChat Pay

微信打赏

jrotty Alipay

支付宝打赏

文章二维码

扫描二维码,在手机上阅读!

本文基于《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
文章链接:https://qqdie.com/archives/typecho-recovery-visible-ok.html (转载时请注明本文出处及文章链接)

typechophp回复可见正则
发表新评论
已有 17 条评论
  1. buxia
    buxia
    回复

    真的太给力了

  2. xxyangyoulin
    xxyangyoulin
    回复

    好好好!good job!

  3. share1223
    share1223
    回复

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

  4. share1223
    share1223
    回复

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

    1. Jrotty
      Jrotty本文作者
      回复

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

      1. share1223
        share1223
        回复

        @Jrotty 谢谢,大佬么么哒。

  5. JIElive
    JIElive
    回复

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

    1. Jrotty
      Jrotty本文作者
      回复

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

  6. Jdeal
    Jdeal
    回复

    大佬,有个小问题,求教,我用的fancybox,但是在开启网站ajax后失效了额,关闭ajax后fancybox可以使用,有方法解决吗

    1. Jrotty
      Jrotty本文作者
      回复

      @Jdeal 在pjax中重新加载这个$( ".class的名字").fancybox();

前篇 后篇