<MyRusakov.ru />

Создание крупного проекта на Java с нуля

Создание крупного проекта на Java с нуля

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

В начале курса у нас будет только идея, а в конце готовый продукт, который можно использовать в практических целях.

В рамках упражнений курса Вы параллельно со мной будете создавать свою большую программу на Java, что даст Вам необходимую практику, после которой для Вас уже не будет разницы, какого размера создавать программы.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Вывод деревьев комментариев
18.04.2012 05:26:06 Вывод деревьев комментариев Сообщение #1
brussens

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
)

)

Происходит зацикливание, как по другому сделать просто не представляю...
Профиль Ответить
18.04.2012 06:03:43 Вывод деревьев комментариев Сообщение #2
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Необходимо выводить с помощью рекурсии. Вот аналогичный пример: http://myrusakov.ru/php-tree-dir.html
Нужно сделать по аналогии.
Профиль Ответить
18.04.2012 06:15:53 Вывод деревьев комментариев Сообщение #3
brussens

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


про рекурсии читал, всю ночь пытался запустить вывод и безуспешно...
Профиль Ответить
18.04.2012 06:22:04 Вывод деревьев комментариев Сообщение #4
brussens

brussens

Мега-мастер

Мега-мастер

Дата регистрации:
11.10.2011 22:50:07

Сообщений: 438

Что именно не могу понять ему не нравится? Ругается на точку, при обращении к шаблону, но что есть точка, что нет её, безуспешно..
Профиль Ответить
18.04.2012 07:11:13 Вывод деревьев комментариев Сообщение #5
brussens

brussens

Мега-мастер

Мега-мастер

Дата регистрации:
11.10.2011 22:50:07

Сообщений: 438

Михаил, ничего не получается((( Подскажите пожалуйста, где ошибки, заранее спасибо!
Профиль Ответить
18.04.2012 18:45:49 Вывод деревьев комментариев Сообщение #6
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

$row - не определена, однако, Вы её используете.
Профиль Ответить
18.04.2012 18:57:22 Вывод деревьев комментариев Сообщение #7
brussens

brussens

Мега-мастер

Мега-мастер

Дата регистрации:
11.10.2011 22:50:07

Сообщений: 438

А разве изза этого может быть зацикливание? Извиняюсь за $row, просто я не спал всю ночь, всё равно зацикливание происходит, только вот не пойму, изза чего
Профиль Ответить
18.04.2012 18:59:08 Вывод деревьев комментариев Сообщение #8
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Выводите $feed и сразу ставьте flush();. Смотрите, что получается, анализируйте, что не так и исправляйте ошибку.
Профиль Ответить
18.04.2012 19:00:13 Вывод деревьев комментариев Сообщение #9
brussens

brussens

Мега-мастер

Мега-мастер

Дата регистрации:
11.10.2011 22:50:07

Сообщений: 438

О, не знал про такую функцию))) Спасибо, попробуем))
Профиль Ответить
19.04.2012 07:38:01 Вывод деревьев комментариев Сообщение #10
brussens

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>

Заранее спасибо, Михаил)
Профиль Ответить