[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: рекурсия функции
zeromind
собрался делать комментарии с ответами.. (на каждый коммент можно отвечать отдельно, и коммент находится под главным, со смещением вправо 50px)
так вот, нашел урок в инете там очень простой код:
<?php
$result = mysql_query("SELECT * FROM comments WHERE parent_id=0");
while($row = mysql_fetch_assoc($result)){
getComment ($row);
}?>

и сама фукнция
function getComment ($row) {
echo "<li class=\"coment\">";
echo "<div class=\"author\">".$row['author']."</div>";
echo "<div class=\"text\">".$row['text']."</div>";
echo "<a href=\"#comment_from\" class=\"reaply\" id=\"".$row['comment_id']."\">Ответить</a>";

$res = mysql_query("SELECT * FROM comments where parent_id=".$row['comment_id']);

if (mysql_num_rows($res) > 0) {

echo "<ul>";

while ($res1 = mysql_fetch_assoc($res)){
getComment ($res1);
}

echo "</ul>";
}

echo "</li>";
}


код впринципе лёгкий ни чего сложного
---------------------------------------------------------------------------------------------------- ------------------------------------
но у меня комментарии с парсингом(с движка ирбиса), и такую фишку не могу чёто прокрутить), что делаю:
	
$cont = getTpl('main/comments/rows');
$cont1 = getTpl('main/comments/rowsp');
function getComment($row,$cont){
$row['date'] = $row['date'];
$row['text'] = createBBtags($row['text']);
$row['id'] = (int)$row['id'];
global $rows;
$rows .= parseTpl($cont, $row);
static $GET;

$result1 = mysqlQuery("SELECT *
FROM `"
. IRB_DBPREFIX ."guest`
WHERE `model` = '"
.$GET['news']."' AND `parent_id` = '".$row['id']."'
ORDER BY `id` DESC"
);
if (mysql_num_rows($result1) > 0) {
while ($rez = mysql_fetch_assoc($result1)){
getComment($rez,$cont1);
}
}
}

while($row = htmlChars(mysql_fetch_assoc($res)))
{
getComment($row,$cont);
}

так вот, цикл с рекурсией - getComment($rez,$cont1); не отрабатывается, выводятся только 1ый шаблон - комментарии $rows .= parseTpl($cont, $row); .. в $cont1 - хранится 1в1 шаблон, там просто отступ будет, чтоб отличать что это ответ на выше пост)
+ в функции приходится обьявлять переменные глобальными + статик, чтобы было без ошибок(( (не знаю правильно ли я так сделал, и безопасно ли обьявлять их глобальными?)
помогите что нужно сделать(



Спустя 21 минута, 36 секунд (16.11.2011 - 19:24) zeromind написал(а):
сделал пока без рекурсии и вообще без функции, только цикл:
        while($row = htmlChars(mysql_fetch_assoc($res))) 
{
$row['date'] = $row['date'];
$row['text'] = createBBtags($row['text']);
$row['id'] = (int)$row['id'];
$rows .= parseTpl($cont, $row);
$result1 = mysqlQuery("SELECT *
FROM `"
. IRB_DBPREFIX ."guest`
WHERE `model` = '"
.$GET['news']."' AND `parent_id` = '".$row['id']."'
ORDER BY `id` DESC"
);
if (mysql_num_rows($result1) > 0) {
while ($rez = mysql_fetch_assoc($result1)){
$rez['date'] = $rez['date'];
$rez['text'] = createBBtags($rez['text']);
$rez['id'] = (int)$rez['id'];
$rows .= parseTpl($cont1, $rez);
}
}
}


комменты выводятся всё отлично, сдвигаются вправо те которые нужно.. но сдвиг 1 раз происходит, т.е. 2 уровня получается, сам пост+ только 1 ответ на него(на этот же ответ уже не получится ответить, смещения не будет, тут мне кажится ресурсия полюбому нужна)

user posted image

Спустя 3 часа, 21 секунда (16.11.2011 - 22:25) Dezigo написал(а):
Это не программирование- это гавно код.
Вы не понемаете как использовать
- функции
- шаблоны
- вы не разделяете логику от контроллера и view.

Спустя 13 минут, 6 секунд (16.11.2011 - 22:38) PandoraBox2007 написал(а):
Dezigo
походу вы еще работаете на ASP.NET xDDD, чувствую НекроСофтный закос

Спустя 13 часов, 56 минут, 26 секунд (17.11.2011 - 12:34) zeromind написал(а):
Цитата (Dezigo @ 16.11.2011 - 22:25)
Это не программирование- это гавно код.
Вы не понемаете как использовать
- функции
- шаблоны
- вы не разделяете логику от контроллера и view.

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

я не понимаю как работает parseTpl, в частности его повторения, видимости и тд.. думаю вообще стоит присмотрется к СМАРТИ шаблонизации..

в итоге пока получилось такое:
user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.