вывод тройного подзапроса в смарти

переделка компонента форум

#1 7 марта 2012 в 02:40
и так как уже не раз писал — переделываю компонент форум — взял за основу от 1.9 и переписываю его (изобретаю велосипед вобщем, но с трёхколёсного детского делаю скоростной горный laugh)
первое что мне не понравилось сразу — это то, что примерно 90% всего кода прописано в файле фронтед в виде php и html кода — а не через смарти для передачи в шаблоны для каждой страницы. именно поэтому у нас у всех одинаковое оформление внешнего вида форума. мы не можем ничего изменить кроме графики.

так вот решил переделывать в первую очередь форум в смарти и столкнулся со следующим.
вот пошли четвёртые сутки, с той невероятной минутки, как я решил переписывать форум для работы со смарти
и так — делаю на локалхосте — поэтому показать не могу — но распишу
структура у нас к примеру такая

  1.  
  2. -категория 1
  3. --форум 1
  4. --форум 2
  5. ---подфорум 1
  6. ---Подфорум 2
  7. -категория 2
  8. --Форум3
  9. ---Подфорум3
  10. ---Подфорум4
  11. --форум4
к примеру вот так — категория это как бы первый уровень, список форумов (именно с этой категории) это второй ну и подфорумы (отображаются в списке форума) это третий. я застрял на втором пока, но думаю если соображу как сделать со вторым, с третьим уровнем проблем не будет
вот привожу код для примера как у меня
во фронтеде
  1.  
  2. $inPage->printHeading($_LANG['FORUMS']);
  3. $inPage->setTitle($_LANG['FORUMS']);
  4. $inPage->addHead('<link rel="alternate" type="application/rss+xml" title="'.$_LANG['FORUMS'].'" href="'.HOST.'/rss/forum/all/feed.rss">');
  5.  
  6. $sql_cat = "SELECT * FROM cms_forum_cats WHERE published = 1 ORDER BY ordering";
  7. $result_cat = $inDB->query($sql_cat) ;
  8. //список категорий форумов в массив
  9. $cat = array();
  10. if ($inDB->num_rows($result_cat)){
  11. $rootid = $inDB->get_field('cms_forums', 'parent_id=0', 'id');
  12. while ($cats = $inDB->fetch_assoc($result_cat)){
  13. // запрос списка форумов данной категории в цикле
  14. $fsql = "SELECT * FROM cms_forums WHERE published = 1 AND category_id = '{$cats['id']}' AND parent_id = '$rootid' ORDER BY ordering";
  15. $fresult = $inDB->query($fsql) ;
  16. if ($inDB->num_rows($fresult)){
  17. //список форумов в массив
  18. $forum = array();
  19. while ($f = $inDB->fetch_assoc($fresult)){
  20. if(!$inCore->checkContentAccess($f['access_list'])) { continue; }
  21. $forum[] = $f;
  22. }
  23. }
  24. $cat[] = $cats;
  25. }
  26. }
  27. $smarty = $inCore->initSmarty('components', 'com_forum_home.tpl');
  28. $smarty->assign('cat', $cat);
  29. $smarty->assign('forum', $forum);
  30.  
  31. $smarty->display('com_forum_home.tpl');
  32.  
и фаил com_forum_home.tpl
  1. <hr><br><hr>
  2. <div class="float_bar"><a href="/forum/latest_posts">{$LANG.LATEST_POSTS}</a> | <a href="/forum/latest_thread">{$LANG.NEW_THREADS}</a></div>
  3. <table class="forums_table" width="100%" cellspacing="0" cellpadding="8" border="0" bordercolor="#999999" >
  4. <tr>
  5. {foreach key=id item=cats from=$cat}
  6. <td colspan="3" width="" class="darkBlue-LightBlue"><a href="/forum/{$cats.seolink}">{$cats.title}</a></td>
  7. <td width="110" class="darkBlue-LightBlue">{$LANG.FORUM_ACT}</td>
  8. <td width="240" class="darkBlue-LightBlue">{$LANG.LAST_POST}</td>
  9. </tr>
  10. {foreach key=id item=forums from=$forum}
  11. <tr>
  12. <td width="32" class="class" align="center" valign="top"><img src="картинка форума" border="0" /></td>
  13. <td width="32" class="class" align="center" valign="top"><img src="тип сообщения" border="0" /></td>
  14. <td width="" class="class" align="left" valign="top">
  15. <div class="forum_link"><a href="/forum/{$forums.id}">{$forums.title}</a></div>
  16. <div class="forum_desc">{$forums.description}</div>
  17. </td>
  18. <td class="class" style="font-size:11px" valign="top">текст</td>
  19. <td style="font-size:11px" class="class" valign="top">текст</td>
  20. </tr>
  21. {/foreach}
  22.  
  23. {/foreach}
  24.  
  25. </table>
  26.  
в итоге вот это у меня выводит все категории, а вот в список форумов во всех категориях выводит список с последней категории. то есть во всех категориях список форумов с последней категории, знаю что надо как то распределить, что если категория такая о — то выводим в список в эту категорию. ну вобщем наверно поняли.

собственно либо подскажите каким макаром это сделать, либо подскажите где про это почитать — в вики тут ничерта нет, в учебнике тоже что то не нашёл именно такого запроса
вот скрин.
у меня должно быть в первой категории Тестовая категория — тестовый форум 1, тестовый форум 2, тестовый форум 3
а в общем форуме так и должно быть (на отсутствие картинок не смотрим) а оно вот так вот
прошу помощи на общее благо (так как не всё, но часть своих наработак по форуму будут в паблике и если удастся договорится с администрацией, то буду просить добавить в релиз)
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.