ホームページ  >  記事  >  バックエンド開発  >  NetEase コメント構築の模倣 PHP+Mysql 実装

NetEase コメント構築の模倣 PHP+Mysql 実装

不言
不言オリジナル
2018-06-04 09:59:244094ブラウズ

この記事は主に NetEase のコメントを模倣して構築する PHP + Mysql 実装を紹介します。これは、必要な友人に参考にしてもらえるように共有します。参考までに、この記事では php と mysql を使用してこの効果を実現しています。

まず、コメント データを保存するデータ テーブルを設計します。

DROP TABLE IF EXISTS `comment`;
CREATE TABLE `comment` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `site` varchar(128) DEFAULT NULL,
  `content` varchar(1000) NOT NULL,
  `time` datetime NOT NULL,
  `pid` int(10) NOT NULL,
  `articleid` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

キー フィールドは、参照されたコメントの ID を保存する、参照がない場合は 0 に設定します。

特定の実装では、主に再帰アルゴリズムを使用して、参照されているすべてのコメントを検索します (

無限分類

メニューと同様) コードは次のとおりです:

<?php 
    require_once"sqlHelper.class.php";
     
    //连接数据库
    $sqlHelper= new SqlHelper(&#39;localhost&#39;,&#39;root&#39;, &#39;root&#39;,&#39;test&#39;, 3306);
 
    //插入评论数据
    if(isset($_POST) && !empty($_POST)){
        $comment= array();
        $comment[&#39;username&#39;] =$_POST[&#39;name&#39;]?$_POST[&#39;name&#39;]:&#39;匿名&#39;;
        $comment[&#39;site&#39;] =$_POST[&#39;site&#39;]?$_POST[&#39;site&#39;]:&#39;
 &#39;; 
        $comment[&#39;pid&#39;] =$_POST[&#39;commentid&#39;]?$_POST[&#39;commentid&#39;]:&#39;0&#39;;
        if($comment[&#39;pid&#39;]
 == $comment[&#39;id&#39;]){
            $comment[&#39;pid&#39;] =&#39;0&#39;;
        }
        $comment[&#39;content&#39;] =$_POST[&#39;content&#39;]?$_POST[&#39;content&#39;]:&#39;...&#39;;
        $comment[&#39;articleid&#39;] =$_POST[&#39;articleid&#39;]?$_POST[&#39;articleid&#39;]:&#39;1&#39;;
        $comment[&#39;time&#39;] = date ( &#39;Y-m-d H:i:s&#39;, time () );
 
        $sql_str= $sqlHelper->get_replace_db_sql("comment",$comment);
        //echo $sql_str;
        $sqlHelper->insert_db($sql_str);
    }
?>
 
<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"xml:lang="en">
 
<head>
 
    <meta http-equiv="Content-Type"content="text/html;charset=UTF-8"/>
    <title>文章评论的无限引用实现</title>
    <style type="text/css">
        *{margin:0;padding:0;}
        body{margin:10px;font-size:14px;font-family:宋体}
        h1{font-size:26px;margin:10px 0 15px;}
        #commentHolder{width:540px;border-bottom:1px solid #aaa;}
        .comment{padding:5px 8px;background:#f8fcff;border:1px solid #aaa;font-size:14px;border-bottom:none;}
        .comment p{padding:5px 0;}
        .comment p.title{color:#1f3a87;font-size:12px;}
        .comment p span{float:right;color:#666}
        .comment p{background:#ffe;padding:3px;border:1px solid #aaa;line-height:140%;margin-bottom:5px;}
        .comment p span{color:#1f3a87;font-size:12px;}
    </style>
</head>
<body>
 
<?php
     
    functionp($str){
        echo"<pre class="brush:php;toolbar:false">";
        if(is_array($str))
            print_r($str);
        else
            echo$str;
        echo"
"; } /* 获取文章id对应的所有评论,以数组的形式返回结果 */ functiongetCommentByArticleId($articleid=1){ $result= array(); if(empty($articleid) || !is_numeric($articleid)){ return$result; } $sql= 'select * from comment where articleid = '. $articleid; global$sqlHelper; $result= $sqlHelper->get_all($sql); //p($result); return$result; } /* 把评论数组数据转换为html格式 */ functioncommentArr2Html($comment_arr) { $str= ''; if(is_array($comment_arr) && !empty($comment_arr)){ $str.= '

'; foreach($comment_arr as $key => $value) { $str.= '

'; $str.= '

'.$value['username'] .''; $str.= '' . $value['time'] .' 发表'; $str.= '

'; global$temp_arr; $temp_arr= array(); //这里去查找当前评论下的所有引用的评论,并格式化为html字符串 $tmpStr= ''; addCommentNode($comment_arr,$value); krsort($temp_arr);//根据key倒叙排序数组 $tmpStr= getChildComment($temp_arr);//添加所有的引用评论 $str.= $tmpStr; $str.= "

" . $value['content'] ."

"; $str.= '

'; } $str.='

'; } return$str; } /* 把temp_arr数组中保存的引用评论信息转换为html形式 */ functiongetChildComment($temp_arr){ $htmlStr= ''; if(!is_array($temp_arr) || empty($temp_arr)){ return''; } foreach($temp_arras $value){ $tmp= '

'; $tmp.= $htmlStr; $tmp.= '' . $value['username'] .' 原贴:
' . $value['content']; $tmp.= '

'; $htmlStr= $tmp; } return$htmlStr; } /* list代表某一文章下的全部评论列表 cmt代表当前要显示的评论 */ functionaddCommentNode($list,$cmt){ if(isset($cmt['pid']) && $cmt['pid'] !='0'){ $find= findParentCmt($list,$cmt['pid']);//找寻id等于当前评论的pid的评论,返回数组。 // 递归调用,只要pid不为零,就加入到引用评论列表 addCommentNode($list,$find); }else{ return; } } /** * 查找list中找寻id等于pid的数组项,并返回 * @param [type] $list [description] * @param [type] $cmtpid [description] * @return [type] [description] */ functionfindParentCmt($list,$cmtpid){ foreach($list as $key => $value) { if($value['id'] == $cmtpid){ /* 用数组的方式来保存所有引用的评论 */ global$temp_arr; $temp_arr[] =$list[$key]; //p($list[$key]);echo "
"; return$list[$key]; } } returnfalse; } $temp_arr= array();//设一个全局的数组变量来保存引用评论的信息 $list= getCommentByArticleId();//通过文章id获取所有的文章评论 $htmlStr= commentArr2Html($list);//把获取到的评论格式化转换为html形式 ?>

文章评论的无限引用PHP+Mysql实现




你的名字:
联系方式或个人网站:
选择引用的评论:
评论内容酷站网软:

関連する推奨事項:

PHP+MySQL はファジー クエリ従業員情報関数を実装します。

PHP+MySQLはページ番号を入力して指定したページにジャンプする例を実装します


PHP+mysql+ajaxは軽量チャットルームを実装します

以上がNetEase コメント構築の模倣 PHP+Mysql 実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。