Emlog弹幕实现方法附教程代码

引言

在博客系统中增加弹幕功能,可以增强用户的互动体验,使内容更加生动有趣。以下是一个基于Emlog博客系统的评论弹幕实现方法,包括核心代码示例。

实现步骤

1. 修改数据库结构

首先,需要在评论表中添加一个字段来标识哪些评论需要置顶显示,即弹幕效果。

ALTER TABLE `emlog_comment` ADD `comment_top` ENUM('n','y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'n' AFTER `hide`;

2. 修改评论模型

找到路径文件/include/model/comment_model.php,并修改SQL查询语句,使其支持按置顶字段排序。

将第38行中的代码:

$sql = "SELECT * FROM ".DB_PREFIX."comment as a where $andQuery ORDER BY a.date ASC $condition";

修改为:

$sql = "SELECT * FROM ".DB_PREFIX."comment as a where $andQuery ORDER BY a.comment_top,a.date ASC $condition";

然后,在文件中插入以下函数,用于置顶和取消置顶评论:

function topComment($commentId) {
    $this->isYoursComment($commentId);
    $row = $this->db->once_fetch_array("SELECT gid FROM ".DB_PREFIX."comment WHERE cid=$commentId");
    $blogId = intval($row['gid']);
    $commentIds = array($commentId);
    /* 获取子评论ID */
    $query = $this->db->query("SELECT cid,pid FROM ".DB_PREFIX."comment WHERE gid=$blogId AND cid>$commentId ");
    while($row = $this->db->fetch_array($query)) {
        if(in_array($row['pid'],$commentIds)) {
            $commentIds[]=$row['cid'];
        }
    }
    $commentIds = implode(',',$commentIds);
    $this->db->query("UPDATE ".DB_PREFIX."comment SET comment_top='y' WHERE cid IN ($commentIds)");
    $this->updateCommentNum($blogId);
}

function notopComment($commentId) {
    $this->isYoursComment($commentId);
    $row = $this->db->once_fetch_array("SELECT gid FROM ".DB_PREFIX."comment WHERE cid=$commentId");
    $blogId = intval($row['gid']);
    $commentIds = array($commentId);
    /* 获取子评论ID */
    $query = $this->db->query("SELECT cid,pid FROM ".DB_PREFIX."comment WHERE gid=$blogId AND cid>$commentId ");
    while($row = $this->db->fetch_array($query)) {
        if(in_array($row['pid'],$commentIds)) {
            $commentIds[]=$row['cid'];
        }
    }
    $commentIds = implode(',',$commentIds);
    $this->db->query("UPDATE ".DB_PREFIX."comment SET comment_top='n' WHERE cid IN ($commentIds)");
    $this->updateCommentNum($blogId);
}

并在适当位置(如第271行左右)添加以下代码,以处理置顶和取消置顶的操作:

case 'topcom':
    foreach($comments as $val) {
        $this->topComment($val);
    }
case 'notopcom':
    foreach($comments as $val) {
        $this->notopComment($val);
    }

3. 修改后台评论管理文件

找到路径文件/admin/comment.php,并插入以下代码以处理置顶和取消置顶的操作请求:

if($action=='top') {
    $id = isset($_GET['id'])?intval($_GET['id']):'';
    $Comment_Model->topComment($id);
    $CACHE->updateCache(array('sta','comment'));
    emDirect("./comment.php?active_top=1");
}

if($action=='notop') {
    $id = isset($_GET['id'])?intval($_GET['id']):'';
    $Comment_Model->notopComment($id);
    $CACHE->updateCache(array('sta','comment'));
    emDirect("./comment.php?active_notop=1");
}

if($operate=='top') {
    $Comment_Model->batchComment('topcom',$comments);
    $CACHE->updateCache(array('sta','comment'));
    emDirect("./comment.php?active_top=1");
}

if($operate=='notop') {
    $Comment_Model->batchComment('notopcom',$comments);','comment'));
    emDirect("./comment.php?active_notop=1");
}

4. 修改后台模板文件

打开后台模板文件/admin/views/comment.php,并插入以下代码以显示置顶和取消置顶成功的消息:

<?php if(isset($_GET['active_top'])): ?>
    <span class="actived">置顶评论成功</span>
<?php endif; ?>
<?php if(isset($_GET['active_notop'])): ?>
    <span class="actived">取消置顶成功</span>
<?php endif; ?>

并在适当位置(如第57行左右)插入置顶标识符输出。

结论

通过以上步骤,你可以在Emlog博客系统中实现评论弹幕功能。这不仅能够提升用户的互动体验,还能让博客内容更加生动有趣。请根据实际情况调整代码和样式,以实现最佳效果。