·烂笔头Web端 34 5752

Typecho显示访客用户身份及用户等级

## 简述

我上一个用的主题是有博主标记的。然后网上也看到了很多typecho等级划分的代码。那我就打算把两者所结合,用户等级+用户身份融合在一起显示。 考虑+实现,花了个把小时,算是完成了吧!

效果

截图

说明

  1. 用户身份:博主、基友、博友。(基友是直接配置,博友是友链抓取)
  2. 除以上三种身份以外,由评论数量作为等级划分依据。
  3. 除博主和基友不显示评论数量以外,其他访客均显示评论量。名称指代为:目的地的前进步数
  4. 鼠标经过后,会显示目的地前进步数。如果是友链博友的话,还会一并显示友链描述信息。
留言1条:您已经向目的地迈出了第一步。
留言2条+:您已经向目的地前进了XX步。
也算是正好和网站名称所契合吧!

functions.php

纯手打啊,我是纯按自己想法来的,各位按自己的主题风格改写。基友邮箱请按格式自行添加。友链数据是从数据库likns表中获取的。如果你是别的友链方式,那就按别的方式来。举一反三,举二反六。实在不会,再留言吧!

/**    
 * 评论者认证等级 + 身份    
 *    
 * @author Chrison    
 * @access public    
 * @param str $email 评论者邮址    
 * @return result     
 */     
function commentApprove(<!--INLINEMATH0-->email = NULL)      
{   
    $result = array(
        "state" => -1,//状态
        "isAuthor" => 0,//是否是博主
        "userLevel" => '',//用户身份或等级名称
        "userDesc" => '',//用户title描述
        "bgColor" => '',//用户身份或等级背景色
        "commentNum" => 0//评论数量
    );
    if (empty(<!--INLINEMATH1-->result;      
    
    $result['state'] = 1;
    $master = array(      
        '基友邮箱1@qq.com',
        '基友邮箱1@qq.com'
    );      
    if (<!--INLINEMATH2-->widget->ownerId) {      
        $result['isAuthor'] = 1;
        $result['userLevel'] = '博主';
        $result['userDesc'] = '很帅的博主';
        $result['bgColor'] = '#FFD67A';
        $result['commentNum'] = 999;
    } else if (in_array(<!--INLINEMATH3-->master)) {      
        $result['userLevel'] = '基友';
        $result['userDesc'] = '很帅的基友';
        $result['bgColor'] = '#65C186';
        $result['commentNum'] = 888;
    } else {
        //数据库获取
        $db = Typecho_Db::get();
        //获取评论条数
        <!--INLINEMATH4-->db->fetchAll($db->select(array('COUNT(cid)'=>'commentNum'))
    	    ->from('table.comments')
    	    ->where('mail = ?', $email));
    	<!--INLINEMATH5-->commentNumSql[0]['commentNum'];
        
        //获取友情链接
        <!--INLINEMATH6-->db->fetchAll($db->select()->from('table.links')
            ->where('user = ?',$email));
        
        //等级判定
        if($commentNum==1){
            $result['userLevel'] = '初识';
            $result['bgColor'] = '#999999';
            $userDesc = '你已经向目的地迈出了第一步!';
        } else {
            if (<!--INLINEMATH7-->commentNum>1) {
                $result['userLevel'] = '初识';
                $result['bgColor'] = '#999999';
            }elseif (<!--INLINEMATH8-->commentNum>=3) {
                $result['userLevel'] = '朋友';
                $result['bgColor'] = '#A0DAD0';
            }elseif (<!--INLINEMATH9-->commentNum>=9) {
                $result['userLevel'] = '好友';
                $result['bgColor'] = '#A0DAD0';
            }elseif (<!--INLINEMATH10-->commentNum>=27) {
                $result['userLevel'] = '挚友';
                $result['bgColor'] = '#A0DAD0';
            }elseif (<!--INLINEMATH11-->commentNum>=81) {
                $result['userLevel'] = '兄弟';
                $result['bgColor'] = '#A0DAD0';
            }elseif ($commentNum>=100) {
                $result['userLevel'] = '老铁';
                $result['bgColor'] = '#A0DAD0';
            }
             <!--INLINEMATH12-->commentNum.'步!'; 
        }
        if($linkSql){
            $result['userLevel'] = '博友';
            $result['bgColor'] = '#21b9bb';
            <!--INLINEMATH13-->linkSql[0]['description'].'&#10;✌️'.$userDesc;
        }
        
        <!--INLINEMATH14-->userDesc;
        <!--INLINEMATH15-->commentNum;
    } 
    return $result;
}

调用方法

评论中调用上面的方法<?php <!--INLINEMATH16-->comments, $comments->mail); ?>。返回以下四个数据。

$commentApprove['state'] //状态
$commentApprove['isAuthor'] //是否是博主
$commentApprove['userLevel'] //用户身份或等级名称
$commentApprove['userDesc'] //用户title描述
$commentApprove['bgColor'] //用户身份或等级背景色
$commentApprove['commentNum'] //评论数量
具体html代码,请根据自己主题调整样式。
<?php <!--INLINEMATH17-->comments, $comments->mail); ?>
<h4 class="author" title="<?php echo $commentApprove['userDesc'] ?>">
    <a href="<?php $comments->url(); ?>">
        <img alt="<?php <!--INLINEMATH18-->avatar ?>" srcset="<?php echo $avatar2x ?> 2x" class="avatar avatar-50 photo" height="50" width="50"/>
        <?php $comments->author(false); ?>
        <span class="isauthor" title="Author">
            <span title="<?php echo <!--INLINEMATH19-->commentApprove['bgColor'] ?>;"><?php echo $commentApprove['userLevel'] ?></span>
            <?php if ($commentApprove['isAuthor'] == 1){ ?>
                <i title="<?php echo $commentApprove['userDesc'] ?>" class="iconfont">&#xe876;</i>
            <?php } ?>
        </span>
    </a>
</h4>
10 个赞
本文最后更新于 2023年2月26日

评论 (34)

小旭
小旭
2024年3月11日 04:08 重庆市 电信 Android
老师,询问一下 我配置好了,但是友联没获取到博友 很怪
Chrison
Chrison
2024年3月11日 16:17 无锡市 电信 Mac
这个文中有提到,每个人友链方式不同。你的友链也是数据库中存储的吗?还是其他方式呢
小旭
小旭
2024年3月11日 17:51 重庆市 电信 Windows
数据库存储方式 有user但是里面null是空的,可能得手动添加邮箱
Chrison
Chrison
2024年3月12日 08:27 无锡市 电信 Mac
恩,一般配友链没有邮箱,邮箱是我自己加的,如果数据库没有的话,就自己加一下。或者在后台配置邮件的地方,看能不能加个邮箱的输入框。一起保存。
小旭
小旭
2024年3月12日 14:07 重庆市 电信 Windows
我能力不行 还是手动加邮箱吧 哈哈😂
小旭
小旭
2024年3月12日 16:39 重庆市 电信 Windows
我div了一下 全部换成图标了😂 看着还行就是图标位置有点难受
Chrison
Chrison
2024年3月14日 08:16 南京市 电信 iPhone
其实怎样都可以了。按照自己喜好来就行。
公爵
公爵
2023年10月13日 09:05 厦门市 电信 Windows
$linkSql = $db->fetchAll($db->select()->from('table.links') ->where('user = ?',$email)); 应该是email不是user吧,我再数据库查了语句用user查邮箱查不到
Chrison
Chrison
2023年10月13日 09:09 苏州市 电信 Mac
你是也有links表的是么。我的links表里,user字段存的是邮箱。每个人的友链表可能不一样,按照自己的来,查邮箱的字段就行
公爵
公爵
2023年10月13日 09:16 北京市 电信 Windows
最近在改造joe主题,想加个等级就看到你着了,我是用的link的插件
Chrison
Chrison
2023年10月13日 09:22 苏州市 电信 Mac
我的是Links 友情链接插件1.1.2-Hanny,有个自定义参数,我都忘了是自带的还是原有的。我用的就是这个代替了邮箱。
Chrison
Chrison
2023年10月13日 09:29 苏州市 电信 Mac
你的不是MyLife么,Joe的是哪个网站
柳橙睿
柳橙睿
2023年8月26日 11:49 武汉市 移动 Windows
哎呀~请问调用方法肿么搞呀?是在哪个文件里添加?
Chrison
Chrison
2023年8月26日 12:04 苏州市 电信 Mac
你和我是同主题,就在comments.php评论文件,但我改过文件,行数可能不一样。```
```的下面。你试试
Chrison
Chrison
2023年8月26日 14:04 苏州市 电信 Mac
测试,附件已发送
wu先生
wu先生
2023年8月6日 19:48 黄冈市 联通 Windows
哈哈,无折腾不生活。
Chrison
Chrison
2023年8月6日 21:44 苏州市 电信 iPhone
最近也折腾不起来了
sagrre
sagrre
2023年8月4日 20:17 丽江市 电信 Windows
已经使用上,感谢感谢
Chrison
Chrison
2023年8月4日 21:47 苏州市 电信 iPhone
客气啦
I'M代代付
I'M代代付
2023年3月1日 09:23 贵阳市 电信 Windows
最近发现好多博客都在搞这个
Chrison
Chrison
2023年3月1日 09:25 南京市 电信 iPhone
多吗。哈哈哈。都爱折腾
Teacher Du
Teacher Du
2023年2月28日 15:31 北京市 移动 Windows
一直想弄这个功能,但不知怎么整合到第三方的评论系统~
Chrison
Chrison
2023年2月28日 15:40 苏州市 电信 Mac
第三方是什么?php的话,估计大差不多。可能需要研究吧
无言的结局
无言的结局
2023年2月26日 11:29 南京市 电信 Mac
谁是你基友~噫~~~
Chrison
Chrison
2023年2月26日 11:33 苏州市 电信 Mac
那你走远点
大湿兄
大湿兄
2023年2月26日 08:15 南京市 电信 iPhone
更新频率有点高👍🏻
Chrison
Chrison
2023年2月26日 08:18 苏州市 电信 iPhone
到处逛,到处参😝
荒野孤灯
荒野孤灯
2023年2月25日 23:29 武汉市 联通 Android
第几步了?
Chrison
Chrison
2023年2月25日 23:31 苏州市 电信 Mac
啊?在这现学啊,代码不是发你了😂
Chrison
Chrison
2023年2月25日 23:41 苏州市 电信 Mac
就这些了。没了。一共就两段代码
荒野孤灯
荒野孤灯
2023年2月26日 07:47 武汉市 联通 Android
666 ,搞起来
Chrison
Chrison
2023年2月26日 10:26 苏州市 电信 iPhone
你网站手机版导航栏没了?是取消了还是出错了?
荒野孤灯
荒野孤灯
2023年2月26日 10:32 黄石市 电信 Windows
还在,注释了……
Chrison
Chrison
2023年2月26日 10:40 苏州市 电信 Mac
搜嘎

发表评论

支持 Markdown 语法