<MyRusakov.ru />

Создание Интернет-магазина на OpenCart 2.0

Создание Интернет-магазина на OpenCart 2.0

Видеокурс "Создание Интернет-магазина на OpenCart 2.0" обучит Вас созданию любых Интернет-магазинов на OpenCart 2. В первом разделе курса разбираются абсолютно все возможности данного движка с примерами.

Во втором разделе создаётся полноценный Интернет-магазин, где Вы уже всё увидите своими глазами.

И, наконец, в третьем разделе курса созданный Интернет-магазин будет размещён в Интернете.

К курсу так же идут бесплатные и очень ценные Бонусы сопоставимые с самим курсом: "Как сэкономить на Яндекс.Директ до 50%", "Дропшиппинг" и "Как раскрутить Интернет-магазин".

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

Подписавшись по 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>

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