Typecho添加博主认证及评论等级(DIY版)

看到 Jdeal 大佬博客里有评论等级功能,觉得挺有意思,于是折腾起来。有问题问度娘:Typecho + 评论等级。

参考

参考大佬 小灯泡设计 的文章:typecho网站添加博主认证及等级--https://www.dpaoz.com/80

为啥到我这出错

这个功能其实挺简单,通过判断评论者的邮箱及评论条数,输出对应的文字或图片。完全按大佬的代码,但为啥到我这 博主 却显示为 VIP1,原代码如下:

/** 评论者认证等级 */
function dengji($i){
    $db=Typecho_Db::get();
    $mail=$db->fetchAll($db->select(array('COUNT(cid)'=>'rbq'))->from('table.comments')->where('mail = ?', $i)->where('authorId = ?','0'));
    foreach ($mail as $sl){
    $rbq=$sl['rbq'];}
    if($rbq<1){
    echo '博主';
    }elseif ($rbq<10 && $rbq>0) {
    echo 'VIP1';
    }elseif ($rbq<20 && $rbq>=10) {
    echo 'VIP2';
    }elseif ($rbq<40 && $rbq>=20) {
    echo 'VIP3';
    }elseif ($rbq<80 && $rbq>=40) {
    echo 'VIP4';
    }elseif ($rbq<100 && $rbq>=80) {
    echo 'VIP5';
    }elseif ($rbq>=100) {
    echo 'SVIP';
    }
}

DIY 代码

/**输出评论者等级*/
function dengji($i){
$db=Typecho_Db::get();
$mail=$db->fetchAll($db->select(array('COUNT(cid)'=>'rbq'))->from('table.comments')->where('mail = ?', $i)->where('authorId = ?','0'));
foreach ($mail as $sl){
$rbq=$sl['rbq'];}
if($rbq<1){
echo '<span class="commentapprove" style="color: #FFF;padding: .05rem .25rem;font-size: 8px;border-radius: 3px;background-color:#2bbc8a;margin-left:-10px;" >博主</span>';
}elseif ($rbq<3 && $rbq>=1) {
echo '<span class="commentapprove" style="color: #FFF;padding: .05rem .25rem;font-size: 8px;border-radius: 3px;background-color:#ccc;margin-left:-10px;" >陌生人</span>';
}elseif ($rbq<9 && $rbq>=3) {
echo '<span class="commentapprove" style="color: #FFF;padding: .05rem .25rem;font-size: 8px;border-radius: 3px;background-color:#666;margin-left:-10px;" >点头之交</span>';
}elseif ($rbq<27 && $rbq>=9) {
echo '<span class="commentapprove" style="color: #FFF;padding: .05rem .25rem;font-size: 8px;border-radius: 3px;background-color:#666;margin-left:-10px;" >酒肉朋友</span>';
}elseif ($rbq<81 && $rbq>=27) {
echo '<span class="commentapprove" style="color: #FFF;padding: .05rem .25rem;font-size: 8px;border-radius: 3px;background-color:#999;margin-left:-10px;" >互相认同</span>';
}elseif ($rbq<100 && $rbq>=81) {
echo '<span class="commentapprove" style="color: #FFF;padding: .05rem .25rem;font-size: 8px;border-radius: 3px;background-color:#999;margin-left:-10px;" >交情莫逆</span>';
}elseif ($rbq>=100) {
echo '<span class="commentapprove" style="color: #FFF;padding: .05rem .25rem;font-size: 8px;border-radius: 3px;background-color:#336699;margin-left:-10px;" >生死之交</span>';
}
}
原因已查明,我之前这个邮箱有用过——不是博主身份。踩了个坑……解决方法是将现在 博主 用的邮箱对应的 authorId 全设置为 1 。SQL语句如下:
update typecho_comments set authorid='1' where mail='博主邮箱账号'

前端调用

评论模板comments.php文件,在评论者名字输出位置后加上如下代码:

<?php dengji($comments->mail);?>

好了,搞定了。技术小白 经常闹笑话,各位大佬见笑了……

至于样式,可自行在上面的输出代码上加一个层,用 style 调整其CSS即可。

具体效果可参考本站评论。



最新创意应用参照博友文字:「目的地-Destination」https://blog.chrison.cn/work/170.html —— 可实现博主、好友认证,友链认证(配合友链插件,需要links数据表),评论等级显示。代码如下:

升级版应用

functions.php

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

前台调用方法

 //评论中调用上面的方法
<?php $commentApprove = commentApprove($comments, $comments->mail); ?>
 //状态
<?php echo $commentApprove['state']; ?>
 //是否是博主
<?php echo $commentApprove['isAuthor']; ?>
 //用户身份或等级名称
<?php echo $commentApprove['userLevel']; ?>
 //用户title描述
<?php echo $commentApprove['userDesc']; ?>
 //用户身份或等级背景色
<?php echo $commentApprove['bgColor']; ?>
 //评论数量
<?php echo $commentApprove['commentNum']; ?>

前端样式

根据自己的主题DIY!或者去大佬的网站扒,哈哈(目的地-Destination——https://blog.chrison.cn/

~ ~  本文结束,喜欢请点赞+分享  ~ ~


 赏 
感谢您的支持,我会继续努力哒!
支付宝收款码
tips
(*) 8 + 3 =
本文共 12 条评论。您也快来参与吧!
    2023年11月18日 四川省成都市 发自Windows 10 回复 0

    我想给评论增加字段 无从下手啊

      2023年11月18日 湖北省武汉市 发自Windows 10 回复 0

      可以考虑改数据表吧

    2023年02月27日 贵州省贵阳市小河区 发自Windows 10 回复 0

    感觉很牛逼,没有插件一步到位吗?
    哈哈哈,代码忒多,有点懵逼。

      2023年02月27日 湖北省黄石市 发自Windows 10 回复 0

      哈哈,大佬的确实牛,可是要根据主题修改
      我用的就只要 Ctrl + C \ Ctrl + V ,不过就是有点简陋。

    2023年02月25日 江苏省苏州市 发自Mac OSX 回复 0

    你倒是写的快。我下午改了一半出门了。哈哈哈

      2023年02月25日 湖北省黄石市 发自Windows 10 回复 0

      不会这么巧吧,你也在整这个!?

        2023年02月25日 江苏省苏州市 发自Mac OSX 回复 0

        你看我的说说,下午的时候,把好友身份加上了。剩下非好友的,则显示等级。
        然后下午有事出去了。所以等级还没写完。只加了身份

          2023年02月25日 湖北省黄石市 发自Windows 10 回复 1

          期待你的完整版,你的想法很赞。

            2023年02月25日 江苏省苏州市 发自Mac OSX 0

            其实后面都一样了。😂。非好友,非博客主的,那就只能按等级了。等我吃完饭写完它。

            2023年02月25日 湖北省武汉市 发自Android 1

            关键是你前面的想法啊,貌似你已经弄完了。来来来

            2023年02月25日 江苏省苏州市 发自Mac OSX 0

            哈哈哈,时刻关注啊。还差一点.鼠标经过的描述,我想给个样式

            2023年02月25日 江苏省苏州市 发自Mac OSX 0

            发你了。fuction.php方法,我都是一句句写的😂。本来是直接返回span样式。后来,改成变量返回了