Heim  >  Artikel  >  Backend-Entwicklung  >  Kommentarsystem für PHP-Entwicklungsartikel

Kommentarsystem für PHP-Entwicklungsartikel

小云云
小云云Original
2018-03-27 10:28:235634Durchsuche

Vor Kurzem musste ich bei der Arbeit eine Kommentarfunktion ausfüllen und habe online nach verschiedenen Anzeigestilen des Kommentarsystems gesucht. Schließlich habe ich unter Bezugnahme auf Kommentarsysteme wie „Duosuo“ und „Changyan“ ein einfaches Kommentarsystem mithilfe der PHP-Sprache implementiert. Der Implementierungsprozess der beiden Methoden (rekursiv und nicht rekursiv) wird aufgezeichnet und die Vor- und Nachteile der beiden Methoden analysiert, es wird jedoch nicht gezeigt, wie das Front-End implementiert wird.

Entwerfen Sie zunächst die Datenbank wie folgt:

create table `comments`(
	`id` bigint unsigned not null AUTO_INCREMENT,
	`arc_id` bigint unsigned not null COMMENT '文章id',
	`user_id` bigint unsigned not null COMMENT '用户id',
	`comment_id` bigint unsigned not null DEFAULT '0' COMMENT '回复某个评论的id',
	`content` varchar(255) not null DEFAULT '' COMMENT '评论或回复的内容',
	`add_time` timestamp not null DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
	PRIMARY KEY (`id`),
	KEY `arc_id` (`arc_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '文章评论表';

Erstellen Sie Testdaten wie folgt:


Die Der spezifische Implementierungsplan lautet wie folgt (im ThinkPHP-Framework implementiert):
1. Rekursive Methode
Vorteile: Der Implementierungscode ist einfach, und wenn die Kommentarebene auf weniger als 5 Ebenen festgelegt ist, wird dies empfohlen Verwenden Sie diese Methode, damit das Frontend dieses Datenergebnis übergeben kann. Einfach zu implementieren.
Nachteile: Wenn die Kommentarebene nicht festgelegt ist, kann das Frontend die Kommentarinformationen nicht anzeigen, und wenn es zu viele Ebenen gibt, wird viel Speicher verbraucht. Noch schlimmer ist, dass jede Rekursion erfolgt muss die Datenbank abfragen, und die Leistung wird stark reduziert.

/**
 * @param $arc_id   文章id
 * @param int $comm_id   评论id
 * @param array $result
 * @return array
 */
function getCommlist($arc_id, $comm_id = 0, &$result = array()){   //获取评论列表
	if(empty($arc_id)){
		return array();
	}
	$_where = "arc_id = {$arc_id} AND comment_id = {$comm_id}";
	$res = M('comments')->where($_where)->order('add_time DESC')->select();
	if(empty($res)){
		return array();
	}
	foreach ($res as $cm) {
		$thisArr = &$result[];
		$cm["_child"] = getCommlist($arc_id,$cm['id'],$thisArr);
		$thisArr = $cm;
	}

	return $result;
}

Ein Teil der Daten ist unten dargestellt:



2 🎜>Vorteile: Die Datenbank wird nur einmal abgefragt und die Leistung ist besser. Kommentare auf N-Ebene können realisiert werden, und das Front-End kann sie auch gut anzeigen.
Nachteile: Der Code ist etwas kompliziert. Bei Kommentaren auf fester Ebene ist die Anzeige von Kommentaren im Front-End komplizierter.

/**
 * @param $arc_id  文章id
 * @return array
 */
public function getCommlist($arc_id){
	if(empty($arc_id)){
		return array();
	}
	$res = M('comments')->where(array('arc_id'=>$arc_id))->order('add_time ASC')->select();
	$dataList = $stack = array();
	if($res){
		foreach($res AS $k=>$v){   //先将评论的数据进行入库(即comment_id=0)
			if($v['comment_id'] == 0){
				$v['_level'] = 0;   //设置层级数
				$v['_root'] = $v['id'];   //标识评论id
				array_push($stack,$v);   //入栈
				unset($res[$k]);
			}
		}

		while(!empty($stack)){
			$node = array_pop($stack);   //出栈
			$dataList[] = $node;
			foreach($res as $_k=>$_v){
				if($_v['comment_id'] == $node['id']){
					$_v['_level'] = $node['_level']+1;   //设置层级数
					$_v['_root'] = $node['_root'];   //标识评论id
					array_push($stack,$_v);   //入栈
					unset($res[$_k]);
				}
			}
		}
	}

	return $dataList;
}
Der Datenanzeigeeffekt ist wie folgt:


Das obige ist der detaillierte Inhalt vonKommentarsystem für PHP-Entwicklungsartikel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn