2017-09-24PHP实现评论模块

您现在的位置是: 首页 > 学无止境 > 笔记

    以前在开发项目中需要用到评论系统,百度了一下真的是把我看的云里雾里,可能是大神写的东西还算是一个菜鸟的我跟不上节奏,所以我力求写一篇我们菜鸟能看得懂比较通俗易懂的文章,废话不多说进入主题。

    首先我们需要建立一张数据表,分别有6个基础字段,分别是:id,用户id,评论的父级id,评论的文章id,评论的内容,评论的发布时间。

QQ图片20171003003247.png

以下是生成数据表的sql语句:

CREATE TABLE comment (
    comm_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    user_id INT UNSIGNED NOT NULL DEFAULT 0,
    parent_id INT UNSIGNED NOT NULL DEFAULT 0,
    article_id INT UNSIGNED NOT NULL DEFAULT 0,
    comm_cont TEXT,
    comm_time INT UNSIGNED NOT NULL DEFAULT 0 
) ENGINE=MYISAM CHARSET=UTF8;

    

    相信很多人在看到这张数据表的结构就已经知道该怎么去实现了,如果你已经有了思路那就没必要在继续看下去,毕竟自己想到的东西实现后对你的帮助是很大的。

    这张表的关键点就在于父级id和评论文章id,相信在评论一篇文章或者一个产品的时候获取它的id是有很多种方法的,这里就不一一举例了。

    那么现在只剩下一个关键点父级id,发布一条评论首先得知道这条评论是对这篇文章发布的评论,还是对一个已经发布的评论发布子评论,判断到这一点那就简单多了。我们把对这篇文章发布的评论父级id存为0,对这篇文章已经发布的评论发布子评论的父级id存为已经发布的评论id(有点绕,多想想就懂了)

    现在一个评论系统数据存储逻辑已经整理好了,那么如何把评论有层级的显示?我这里附上片段核心代码,相信你们一看就懂。

/**
 * @param $data    array 数据
 * @param $parent    string 父级元素的名称    如 parent_id
 * @param $son    string    子级元素的名称    如 comm_id
 * @param $pid    int 父级元素的id 实际上传递元素的主键
 * @return array 
 */
function getSubTree($data,$parent,$son,$pid=0){
    $tmp=array();
    foreach($data as $key => $value){
        if($value[$parent] == $pid){
            $value['child'] = getSubTree($data,$parent,$son,$value[$son]);
            $tmp[] = $value;            
        }
    }
    return $tmp;
}


关键字词:评论 | PHP | 评论模块

上一篇:返回列表

下一篇:TP5的多语言切换