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博客系统中实现评论弹幕功能。这不仅能够提升用户的互动体验,还能让博客内容更加生动有趣。请根据实际情况调整代码和样式,以实现最佳效果。
请登录后发表评论
注册
社交账号登录
停留在世界边缘,与之惜别