fizot
Новичок
Дубль 2.Smarty+ PHP. Вот такая вот задачка, ума не приложу.
Постараюсь всё подробно разъяснить, чтобы поменьше в коде разбираться. Т.к. я уже второй день парюсь над этим, и прошу помочь.
Вообщем это функция рекруссивно проходит по всем дочерним документам и посылает их в Смарти.
И ГЛАВНЫЙ И ДОЧЕРНИЕ ДОКУМЕНТЫ(ВСЁ ДЕРЕВО) ПОСЫЛАЕТСЯ В СМАРТИ И ТАМ ВЫВОДИТСЯ.
НО ЗНАНИЙ СМАРТИ У МЕНЯ ЕЩЁ МЕНЬШЕ, И ПОЭТОМУ Я НЕ ЗНАЮ КАК МНЕ РЕАЛИЗОВАТЬ НУЖНЫЙ МНЕ ВЫВОД НА ЭКРАН, ВОТ ШАБЛОН СМАРТИ:
В ИТОГЕ ВСЁ ЭТО ВЫВОДИТСЯ ПРИМЕРНО ТАК http://fizot.narod.ru/read.htm
А ТЕПЕРЬ ВОПРОС:
КАК МНЕ СДЕЛАТЬ, ЧТОБЫ ЗАКЛЮЧЕНИЕ ГОЛОВНОГО ДОКУМЕНТА РАСПАЛАГАЛОСЬ ПОСЛЕ ВСЕХ СВОИХ ДОЧЕРНИХ ДОКУМЕНТОВ, как видно в Смарти
<BR><b>Вступление:</b><BR><{$article_data[article].up_text}>
<BR><b>Заключение:</b><BR><{$article_data[article].down_text}><BR><BR>
Тут идет Вступление, а сразу после него Заключение, так вот, между Вступлением и Заключением должны распологатся дочерние документы, этого поддокумента, а сейчас идет примерно такая вещь:
Головной документ:
Вступление....
Дочерний документ:
Вступление...
Заключение... <-Это заключение должно располагаться под всеми его поддокументами
Его поддокумент
Вступление...
Заключение...
Может тут рекурсию нужно?Ведь дерево может быть стремящимся к бесконечности
Постараюсь всё подробно разъяснить, чтобы поменьше в коде разбираться. Т.к. я уже второй день парюсь над этим, и прошу помочь.
Вообщем это функция рекруссивно проходит по всем дочерним документам и посылает их в Смарти.
PHP:
function get_sub($id_gens,$begin=''){
$begin.=" ";
global $db,$smarty;
if ($article_sub_list = $db->query("SELECT article.*,users.login FROM ".DB_PREFIX."article article RIGHT JOIN ".DB_PREFIX."users users ON users.id = article.id_user WHERE id_gen='".$id_gens."' and level='1' ORDER BY doc_order ASC")) {
while ($article_sub_data= $db->fetch_array($article_sub_list))
{
$article_sub_data['sub']=$begin;
if ($popravok=$db->query("SELECT * FROM ".DB_PREFIX."article WHERE (id_prav='".$article_sub_data['id']."' || id_gen='".$article_sub_data['id']."') and level='2'"))$article_sub_data['popravok']=$db->num_rows($popravok);
$smarty->append("article_data",$article_sub_data);
get_sub($article_sub_data['id'],$begin);
}
}
}
ЗДЕСЬ Я ДЕЛАЮ ВЫБОРКУ ИЗ БД ГЛАВНОГО ДОКУМЕНТА, И ВЫЗЫВАЮ ФУНКЦИЮ GET_SUB, КОТОРАЯ РЕКРУССИВНО ВЫВЕДЕТ ВСЁ ПОДДЕРЕВО.
$article_list = $db->query("SELECT article.*,users.login FROM ".DB_PREFIX."article article RIGHT JOIN ".DB_PREFIX."users users ON users.id = article.id_user WHERE article.id='".$id_article."'");
if ($article_list_data= $db->fetch_array($article_list))
{
$smarty->append("article_data",$article_list_data);
get_sub($article_list_data['id']);
$smarty->display("article/read_article.tpl");
}
НО ЗНАНИЙ СМАРТИ У МЕНЯ ЕЩЁ МЕНЬШЕ, И ПОЭТОМУ Я НЕ ЗНАЮ КАК МНЕ РЕАЛИЗОВАТЬ НУЖНЫЙ МНЕ ВЫВОД НА ЭКРАН, ВОТ ШАБЛОН СМАРТИ:
PHP:
<title>Чтение статей</title>
<BR>
<center><B>Чтение документа "<{$article_data.0.name}>"</B><BR>
<{if $access<3}><a href="read.php?id_edit=<{$article_data.0.id}>">Изменить<a/> <{/if}> </center><BR>
<table width="100%" border="1" cellpadding="5" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td width="50"><B>Заголовок</B></td>
<td><B><{$article_data.0.subject}></B></td>
</tr>
<tr>
<td width="50"><B>Вступление</B></td>
<td><B><{$article_data.0.up_text}></B></td>
</tr>
<{if $article_data.1.name}> //Тут я проверяю есть ли дочерние документы и если есть, то вывожу их
<tr>
<td width="50"><B>Дочерние документы</B></td>
<td>
<table width="100%" border =1 cellpadding="5">
<TR><td>
<{section name=article loop=$article_data start=1}>
<B><a class="sub_doc" href="read.php?id_article=<{$article_data[article].id}>"><{$article_data[article].sub}><{$article_data[article].name}></a> <{$article_data[article].subject}></b>
<BR><b>Вступление:</b><BR><{$article_data[article].up_text}>
<BR><b>Заключение:</b><BR><{$article_data[article].down_text}><BR><BR>
<{/section}>
</td>
</tr>
</table>
</td>
</tr>
<{/if}>
<tr>
<td width="50"><B>Заключение</B></td>
<td><B><{$article_data.0.down_text}></B></td>
</tr>
А ТЕПЕРЬ ВОПРОС:
КАК МНЕ СДЕЛАТЬ, ЧТОБЫ ЗАКЛЮЧЕНИЕ ГОЛОВНОГО ДОКУМЕНТА РАСПАЛАГАЛОСЬ ПОСЛЕ ВСЕХ СВОИХ ДОЧЕРНИХ ДОКУМЕНТОВ, как видно в Смарти
<BR><b>Вступление:</b><BR><{$article_data[article].up_text}>
<BR><b>Заключение:</b><BR><{$article_data[article].down_text}><BR><BR>
Тут идет Вступление, а сразу после него Заключение, так вот, между Вступлением и Заключением должны распологатся дочерние документы, этого поддокумента, а сейчас идет примерно такая вещь:
Головной документ:
Вступление....
Дочерний документ:
Вступление...
Заключение... <-Это заключение должно располагаться под всеми его поддокументами
Его поддокумент
Вступление...
Заключение...
Может тут рекурсию нужно?Ведь дерево может быть стремящимся к бесконечности