Typecho添加留言认证标识

为了结合博客中匿名留言的功能做了个认证功能,虽然比较简单,但是还是比较有意思的,下面是前台的效果图:

后台的效果图:

添加一个这样的功能首先需要到数据库中的comments表添加一个字段(auth),然后再修改程序源码,需要改动的文件涉及到:

build\var\Widget\Comments\Archive.php
build\var\Widget\Comments\Edit.php
build\var\Widget\Abstract\Comments.php
build\admin\manage-comments.php

另外自备图标文件一个,准备工作做好之后就可以修改了(修改前请自行备份源文件)。
首先添加一个字段结构如下图:

修改Comments.php文件,修改成员函数select为:

public function select()
{
    return $this->db->select('table.comments.coid', 'table.comments.cid', 'table.comments.author', 'table.comments.mail', 'table.comments.url', 'table.comments.ip',
    'table.comments.authorId', 'table.comments.ownerId', 'table.comments.agent', 'table.comments.text', 'table.comments.type', 'table.comments.status', 'table.comments.parent', 'table.comments.created','table.comments.auth')
    ->from('table.comments');
}

然后添加一个成员函数___theAuth:

protected function ___theAuth()
{
    $text = '';
    if ($this->auth){
        $text = '<img src="' . Typecho_Common::url('usr/uploads/avatarCache/auth.jpg', $this->options->siteUrl) . '" title="认证" />';
    }
    return $text;
}

修改Archive.php文件在大约109行之后插入:

<?php $this->theAuth();?>

这样前台显示部分就完成了,下面继续修改后台操作相关文件,修改Edit.php文件,在成员函数action中插入:

$this->on($this->request->is('do=auth'))->authComment();

添加成员函数authComment:

public function authComment()
{
    $coid = $this->request->filter('int')->coid;
    $commentSelect = $this->db->fetchRow($this->select()
        ->where('coid = ? and auth = 0', $coid)->limit(1), array($this, 'push'));
        
    if ($commentSelect && $this->commentIsWriteable()) {
        $this->db->query($this->db->update('table.comments')
        ->rows(array('auth' => 1))->where('coid = ?', $coid));
        $this->widget('Widget_Notice')->set(_t('该评论已被认证'), NULL,'success');
    }else{
        $this->widget('Widget_Notice')->set(_t('该评论认证失败'), NULL,'notice');
    }
    $this->response->goBack();
}

修改manage-comments.php,大约在108行左右添加如下代码:

<?php if($comments->auth): ?>
<span class="weak"><?php _e('认证'); ?></span>
<?php else: ?>
<a href="<?php $options->index('/action/comments-edit?do=auth&coid=' . $comments->coid); ?>" class="ajax"><?php _e('认证'); ?></a>
<?php endif; ?>
 | 

最后可以自行测试一下,效果见本文的上一篇文章,另外可以继续扩展一下,现在这种认证只是单纯的管理来认证,如果有任何疑问可以留言。

补充一下,吧上述功能写成插件了,下载地址:点击下载, 需要注意的是使用需要在指定位置加入:

auth_Plugin::bgoutput($comments->coid);
auth_Plugin::fgoutput($comments->coid);

位置的话根据模板来定,由于该功能只是个人使用,所以不过多说明,如果需要使用请留言。

没有评论: