Вывод дочерних комментариев в шаблоне родителя
Использую известный метод, когда данные из 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
.
Кто сможет помочь, будет очень крут, потому как сам пока решить не могу...