Typecho·非插件实现回复可见和登录可见(完美版)

笔记 · 08-14 · 100 人浏览
Typecho·非插件实现回复可见和登录可见(完美版)

在网上搜索了好多的教程,只能单一实现回复可见或是登录可见,好多插件也是如此且年久失修,都不好用,于是在豆包AI的加持下实现了回复可见和登录可见的功能,正文开始:

封面

修改<?php ($this->content); ?>,一般在post.phppage.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);
                
                $finalContent = $this->content;  // 先保存原始内容
                
                if($this->user->hasLogin()) {
                    // 处理登录可见
                    $finalContent = preg_replace("/\[login\](.*?)\[\/login\]/sm",'<div class="login_reply2view jz jc ys">$1</div>', $finalContent);
                } else {
                    $finalContent = preg_replace("/\[login\](.*?)\[\/login\]/sm",'<div class="login_reply2view jz jc ys">此处内容需要<a href="/admin" target="_blank">登录</a>后方可阅读</div>', $finalContent);
                }
                
                if($this->user->hasLogin() || $result) {
                    // 处理回复可见
                    $finalContent = preg_replace("/\[hide\](.*?)\[\/hide\]/sm",'<div class="reply2view jz jc ys">$1</div>', $finalContent);
                } else {
                    $finalContent = preg_replace("/\[hide\](.*?)\[\/hide\]/sm",'<div class="reply2view jz jc ys">此处内容需要<a href="#comments">评论</a>回复后(审核通过)方可阅读</div>', $finalContent);
                }
                
                echo $finalContent;
                ?>
                <!-- 回复&登录可见 -->

如修改了默认后台地址请替换相应的登陆地址。

修改functions.php

将下面的代码片段添加到文件末尾处

// 回复可见
Typecho_Plugin::factory('Widget_Abstract_Contents')->excerptEx = array('z97hide','one');
Typecho_Plugin::factory('Widget_Abstract_Contents')->contentEx = array('z97hide','one');
class z97hide {
    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;
}
}
// 登录可见
Typecho_Plugin::factory('Widget_Abstract_Contents')->excerptEx = array('z97login','one');
Typecho_Plugin::factory('Widget_Abstract_Contents')->contentEx = array('z97login','one');
class z97login {
    public static function one($con,$obj,$text)
    {
      $text = empty($text)?$con:$text;
      if(!$obj->is('single')){
      $text = preg_replace("/\[login\](.*?)\[\/login\]/sm",'',$text);
      }
      return $text;
    }
}

添加样式

.login_reply2view {
    background-color: #f8f9fa;
    padding: 10px;
    border: 1px solid #dee2e6;
    border-radius: 5px;
    font-size: 14px;
    color: #6c757d;
}

.reply2view {
    background-color: #e9ecef;
    padding: 10px;
    border: 1px solid #ced4da;
    border-radius: 5px;
    font-size: 14px;
    color: #495057;
}

您可以根据自己的需求进一步修改这些样式,例如颜色、字体大小、边距等,以使其更符合您的网站整体风格。

使用(使用时去掉@)

回复可见:在文章内使用[@hide][/hide]标签包裹即可
登陆可见:在文章内使用[@login][/login]标签包裹即可


网站相关 豆包AI
THEME JASMINE · FOREVERBLOG