Вывод дочерних комментариев в шаблоне родителя

Рейтинг: 0Ответов: 0Опубликовано: 26.10.2014

Использую известный метод, когда данные из Mysql сортируются по PID, ID. В итоге получаем выходной массив вида:

$arr = array(
     array('id'=>1, 'pid'=>0, 'name'=>'Comment 1'),
     array('id'=>8, 'pid'=>0, 'name'=>'Comment 2'),
     array('id'=>9, 'pid'=>0, 'name'=>'Comment 3'),
     array('id'=>10, 'pid'=>0, 'name'=>'Comment 4'),
     array('id'=>11, 'pid'=>0, 'name'=>'Comment 5'),
      array('id'=>2, 'pid'=>1, 'name'=>'Comment 1.1'),
      array('id'=>3, 'pid'=>1, 'name'=>'Comment 1.2'),
      array('id'=>6, 'pid'=>1, 'name'=>'Comment 1.3'),
       array('id'=>4, 'pid'=>2, 'name'=>'Comment 1.1.1'),
       array('id'=>5, 'pid'=>2, 'name'=>'Comment 1.1.2'),
       array('id'=>7, 'pid'=>2, 'name'=>'Comment 1.1.3'),
     array('id'=>12, 'pid'=>8, 'name'=>'Comment 2.1'),
      array('id'=>17, 'pid'=>8, 'name'=>'Comment 2.2'),
      array('id'=>14, 'pid'=>9, 'name'=>'Comment 3.1'),
      array('id'=>13, 'pid'=>12, 'name'=>'Comment 2.1.1'),
       array('id'=>16, 'pid'=>13, 'name'=>'Comment 2.1.1.1'),
       array('id'=>15, 'pid'=>14, 'name'=>'Comment 3.1.1'),
     );

Меняем структуру массива:

for ($i = 0, $c = count($arr); $i < $c; $i++)
     {
       $new_arr[$arr[$i]['pid']][] = $arr[$i];
     }

Рекурсивная функция вывода комментариев:

  function my_sort($data, $parent = 0, $level = 0)
     {
       $arr = $data[$parent];

       for($i = 0; $i < count($arr); $i++)
       {
         $commentParent.='<div>'.$arr[$i]['name'].'<div class="dotter">Здесь под каждый комментарием - все дочерние комменты, если есть</div></div>';
           if(isset($data[$arr[$i]['id']])) my_sort($data, $arr[$i]['id'], 20);
       }
     }

Вся сложность в том, что не получается вывести в одном потоке ВСЕ дочерние комментарии class="dotter" в "родительских" блоках.

Пробовал делать так:

В цикле делал проверку на то, является ли дочерний комментарий к его родителю:

if ($parent > 0){
  $dotter.= 'Comment 1.2';
}

Если да, то складировал отдельно в $dotter все дочерние комменты. Таким образом, сейчас parent и dotter комментарии в отдельных шаблонах. Остается распределить $dotter по всем соответствующим $commentParent.

Смысл моей идеи был таков:

Отделить parent и children комментарии в шаблоны (строку). В комментариях, где parent = 0 -родители, выставить в строке некий строчный идентификатор %id_parent%, для того, чтобы с помощью сделать замену строк:

str_replace("%id_parent_%", $dotter, $commentParent);

Т-е, зная PID дочернего комментария, мы вставляем его шаблон $dotter в позицию %id_parent_% шаблона $commentParent.

Кто сможет помочь, будет очень крут, потому как сам пока решить не могу...

Ответы

Ответов пока нет.