2011-01-12 70 views
0

我想實現一個使用php的線程評論系統,並且我發現了一些已經寫好的東西,但是我不能確切地看到如何使用它,我對類不熟悉,所以我想知道是否有人可以幫忙解釋我將如何使用代碼。下面的代碼是從網站有人可以解釋一下這個類的php線程評論系統嗎?

http://www.jongales.com/blog/2009/01/27/php-class-for-threaded-comments/

的代碼的類如下:

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); 
     } 
    } 

} 

該網站說,使用的一個例子是:

$comments = 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, 'parent_id'=>NULL, 'text'=>'Second Parent'), 
        array('id'=>5, 'parent_id'=>4, 'text'=>'Second Child') 
       ); 

$threaded_comments = new Threaded_comments($comments); 

$threaded_comments->print_comments(); 

但這是我遇到問題的地方。首先,我不完全相信,我應該如何設置數據庫,

目前它只有3排,

id 
page 
user 
comment 

,我會查詢使用mysqli的預處理語句這個數據庫。大概是這樣的:

$DBH = getDBH(); 
$q = $DBH->prepare("SELECT * FROM comments WHERE page = ?"); 
$q->bind_param("i", $page); 
$q->execute(); 

,但我不知道,我怎麼能去展示這一點,我知道需要有另一行添加到數據庫中,聲明如果評論是另一個評論的孩子。任何幫助是極大的讚賞

+0

我建議你首先閱讀本教程:http://dev.mysql.com/tech-resources/articles/hierarchical-data.html這是如何使用mysql存儲分層數據的一個很好的概述。你可以跳過嵌套的東西,它可能不適用於線程註釋。 – GWW 2011-01-12 20:26:59

+0

非常感謝您的幫助。 Althoug我要求一個探索,我也在尋找關於這個問題的一些信息。非常感謝幫忙。 – mcbeav 2011-01-12 21:26:59

回答

2

您將需要另一列添加到您的表,parent_id

然後你取像往常一樣所有的意見,把它們放到一個數組並將它傳遞給Threaded_comments構造

$result = $mysqli->query(
    "SELECT id, parent_id, comment AS text 
     FROM yourtable"); 

$all_results = $result->fetch_all(MYSQLI_ASSOC); 
/* For MySQLi_STMT */ 

$q = $DBH->prepare("SELECT id, parent_id, comment FROM comments WHERE page = ?"); 
$q->bind_param("i", $page); 
$q->execute(); 

$q->bind_result($id, $parent_id, $comment); 

$all_results = array(); 

while ($q->fetch()) { 
    $all_results[] = array(
     'id' => $id, 
     'parent_id' => $parent_id, 
     'text' => $comment); 
} 
$q->close(); 


$tc = new Threaded_Comments($all_results); 
相關問題