2011-01-12 3 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

+0

Большое спасибо за помощь. Альтуг, я попросил объяснений, я также искал некоторую информацию по этому вопросу. Большое спасибо за помощь. – mcbeav

ответ

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); 
+0

спасибо за тонну за помощь, плохо проверьте это. еще раз спасибо! – mcbeav

+0

Вызов неопределенного метода mysqli_stmt :: fetch_all() - это ошибка, которую я получаю, любая идея о том, как ее исправить? Как передать результаты в массив, если я использую подготовленные записи? – mcbeav

+0

Да, я немного смущен этим сейчас, я продолжаю получать ошибку, я уверен, что это с моей стороны здесь, но я надеюсь, что вы можете помочь мне здесь. – mcbeav

 Смежные вопросы

  • Нет связанных вопросов^_^