我发现这个类使用PHP和
MySQL进行线程评论:
原文链接:https://www.f2er.com/php/134067.html<?PHP class Threaded_comments { public $parents = array(); public $children = array(); /** * @param array $comments */ function __construct($comments) { foreach ($comments as $comment) { if ($comment['parent_id'] === NULL) { $this->parents[$comment['id']][] = $comment; } else { $this->children[$comment['parent_id']][] = $comment; } } } /** * @param array $comment * @param int $depth */ private function format_comment($comment,$depth) { for ($depth; $depth > 0; $depth--) { echo "\t"; } echo $comment['text']; echo "\n"; } /** * @param array $comment * @param int $depth */ private function print_parent($comment,$depth = 0) { foreach ($comment as $c) { $this->format_comment($c,$depth); if (isset($this->children[$c['id']])) { $this->print_parent($this->children[$c['id']],$depth + 1); } } } public function print_comments() { foreach ($this->parents as $c) { $this->print_parent($c); } } }
这适用于这个数组:
$comment = array( array('id'=>1,'parent_id'=>NULL,'text'=>'Parent'),array('id'=>2,'parent_id'=>1,'text'=>'Child'),array('id'=>3,'parent_id'=>2,'text'=>'Child Third level'),array('id'=>4,'text'=>'Second Parent'),array('id'=>5,'parent_id'=>4,'text'=>'Second Child') );
结果:
$tc = new Threaded_comments($comment); $tc->print_comments();
结果是:
Parent Child Child Third level Second Parent Second Child
这工作正常但是对于defign评论列表(html)我需要将所有HTML代码添加到私有函数format_comment($comment,$depth)中.这不是好方法,我认为需要从PHP类中单独的html.
function _comments_($id,$type){ $DB_QUERY = MysqLi::f("SELECT id,user,email,message,timestamp,parent_id,rfield_1,rfield_2,rfield_3,rfield_4,rfield_5 FROM " . NEWS_COMMENTS . " LEFT JOIN " . NEWS_REVIEWS . " ON " . NEWS_COMMENTS . ".id = " . NEWS_REVIEWS . ".cid WHERE pid = ? AND type = ? AND approved = 1 ORDER BY timestamp DESC LIMIT 12",$id,$type); foreach($DB_QUERY as $row){ $commentdata[] = $row; } return $commentdata; } $comments_list = _comments_('125','book'); foreach($comments_list as $row){ $comments[] = array( 'id' => $row['id'],'parent_id' => $row['parent_id'],'name' => $row['user'],'text' => $row['message'],'datetime' => $row['timestamp'] ); } $tc = new Threaded_comments($comments); $tc->print_comments();
在我的页面中,使用format_comment显示线程注释并且工作正常.以防我需要使用PHP类中的单独html设计输出.
在这种情况下我们如何从类中分离HTML代码?!