brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Михаил, не могу целую ночь вывести комментарии в древовидной форме.
Использую tpl, и вот как проциклировать их, просто незнаю.
Вот сам код обработчика
<?php
class UserPage {
function __construct() {
require_once($_SERVER['DOCUMENT_ROOT'] . "/class/FeedBack.php"
$this->FB = new FeedBack();
}
function sfrd($a = $this->FB->feedResultSort()) {
foreach ($a as $row) {
$feed .= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/temp/feedback.tpl"
$feed = str_replace("{com_id}", $row['id'], $feed);
$feed = str_replace("{nickname}", $row['user_id'], $feed);
$feed = str_replace("{date}", $row['date_add'], $feed);
$feed = str_replace("{com_text}", $row['comment'], $feed);
if ($row['childs']) {
$feed = str_replace("{com_child}", $this->sfrd($row['childs']), $feed);
}
else {
$feed = str_replace("{com_child}", '', $feed);
}
}
echo $feed;
}
}
?>
И сам массив, который поступает в цикл, т.е. $a
Array
(
[1] => Array
(
[id] => 1
[parent_id] => 0
[user_id] => 2
[comment] => Комментарий номер 1
[date_add] => 17 Апреля 2012 23:47
[childs] => Array
(
[3] => Array
(
[id] => 3
[parent_id] => 1
[user_id] => 2
[comment] => еааааа!)))
[date_add] => 17 Апреля 2012 23:48
)
[4] => Array
(
[id] => 4
[parent_id] => 1
[user_id] => 2
[comment] => hgasmnxabnsxbnabnxabnsx
[date_add] => 18 Апреля 2012 02:21
)
)
)
[2] => Array
(
[id] => 2
[parent_id] => 0
[user_id] => 2
[comment] => Коммент 2
[date_add] => 17 Апреля 2012 23:47
)
)
Происходит зацикливание, как по другому сделать просто не представляю...
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Необходимо выводить с помощью рекурсии. Вот аналогичный пример: http://myrusakov.ru/php-tree-dir.html
Нужно сделать по аналогии.
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Михаил, вот единственное, что получается по статье
class UserPage {
function __construct() {
require_once($_SERVER['DOCUMENT_ROOT'] . "/class/FeedBack.php"
$this->FB = new FeedBack();
}
function sfrd() {
$a = $this->FB->feedResultSort();
foreach($a as $f) {
$feed = file($_SERVER['DOCUMENT_ROOT'] . "/temp/feedback.tpl"
$feed = str_replace("{com_id}", $row['id'], $feed);
$feed = str_replace("{nickname}", $row['user_id'], $feed);
$feed = str_replace("{date}", $row['date_add'], $feed);
$feed = str_replace("{com_text}", $row['comment'], $feed);
if (is_array($f['childs'])) {
$feed = str_replace("{com_child}", $this->sfrd(), $feed);
}
else $feed = str_replace("{com_child}", '', $feed);
}
return $feed;
}
}
про рекурсии читал, всю ночь пытался запустить вывод и безуспешно...
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Что именно не могу понять ему не нравится? Ругается на точку, при обращении к шаблону, но что есть точка, что нет её, безуспешно..
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Михаил, ничего не получается((( Подскажите пожалуйста, где ошибки, заранее спасибо!
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
$row - не определена, однако, Вы её используете.
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
А разве изза этого может быть зацикливание? Извиняюсь за $row, просто я не спал всю ночь, всё равно зацикливание происходит, только вот не пойму, изза чего
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Выводите $feed и сразу ставьте flush();. Смотрите, что получается, анализируйте, что не так и исправляйте ошибку.
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
О, не знал про такую функцию))) Спасибо, попробуем))
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Михаил, вобщем безуспешно исправлять то, что я там написал. Просто скрипт я взял другого человека, а этот скрипт как раз создан с тем условием, что бы избавиться от рекурсии. Вот есть две функции для вывода дерева, только вот проблема в самом обработчике. Что косается процедурного кода, то я заставил правильно на процедурном заработать, а вот, что косается перевода в метода, то тут уже сложнее.
Подскажите пожалуйста, как в методы перевести. Собственно вот код самого вывода в процедурном виде
require_once($_SERVER['DOCUMENT_ROOT'] . "/class/FeedBack.php"
$a = new FeedBack();
function commentsToTemplate($comment)
{
ob_start();
include './temp/feedback.php';
$comments_string = ob_get_contents();
ob_end_clean();
return $comments_string;
}
function commentsString($data)
{
foreach($data as $w)
{
$string .= commentsToTemplate($w);
}
echo $string;
}
$data = $a->feedResultSort();
$comments = commentsString($data);
$data = NULL;
А вот и шаблон вывода, который сделан непосредственно в php, а не tpl, т.е. файл feedback.php
<li id="comment<?php echo $comment['id']?>">
<div class="commentContent">
<div class="feedblock">
<div class="feedava"><a href="#"><img src="images/ava.jpg" /></a></div>
<h6><span><a class="feednick" href="#">BrusSENS<!--< ?php echo $comment['user_id']?>--></a><?php echo $comment[date_add]?></span> </h6>
<div class="comment">
<?php echo $comment[comment]?>
</div>
<span class="responce">• <a href="#comment<?php echo $comment['id']?>">Ответить</a></span>
<span class="drop">• <a class="deletecom" href="#comment<?php echo $comment['id']?>">Удалить</a></span>
<span class="spam">• <a class="spam" href="#comment<?php echo $comment['id']?>">Это спам!</a></span>
</div>
<div class="clear"></div>
</div>
<?php if($comment[childs]){ ?>
<ul id="commentsRoot<?php echo $comment[id]?>">
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/class/view/UserPage.php"
echo commentsString($comment[childs]);
?>
</ul>
<?php } ?>
</li>
Заранее спасибо, Михаил)