За последние 24 часа нас посетил 17041 программист и 1702 робота. Сейчас ищет 941 программист ...

Дерево неограниченного уровня вложенности в Smarty

Тема в разделе "PHP для новичков", создана пользователем Anneta, 7 окт 2010.

  1. Anneta

    Anneta Активный пользователь

    С нами с:
    7 окт 2010
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте) подскажите, как можно реализовать вывод каталога товаров неограниченного уровня вложенности в шаблоне Smarty...

    index.php


    PHP:
    1. <?php
    2. require_once("./cnf/config.php");
    3. require_once("./include/include.php");
    4. /*********************** подключаем библиотеку smarty ***********************/
    5.  
    6. define('SMARTY_DIR','./smarty_library/');
    7. require(SMARTY_DIR.'Smarty.class.php');
    8.  
    9. $smarty = new Smarty ();//обьект smarty
    10.  
    11. $smarty->template_dir='./tpl/templates/';//указываем путь к шаблонам
    12. $smarty->compile_dir='./tpl/templates_c/';
    13. $smarty->config_dir='./tpl/configs/';
    14. $smarty->cache_dir='./tpl/cache/';
    15.  
    16. /***************************** создаем переменные php ************************/
    17.  
    18. $arr_meta_tags['title'] = "Мой личный хостинговый сайт";
    19. $arr_meta_tags['keywords'] = "хостинг, площадка, хостинг-услуги";
    20. $arr_meta_tags['description'] = "Лучший хостинговый сайт предоставит хостинг-услуги по оптимальным ценам";
    21. $arr_meta_tags['content'] = "Хостинг – это услуга, по размещению вашего сайта на сервере, за которым следят квалифицированные специалисты, поддерживающие его работоспособность 24 часа в сутки и 7 дней в неделю. Не многие хостинг-компании способны предоставить хорошие условия, и только единицы могут дать приемлемое для вас соотношение цены и качества. Таковой компанией является Hostland.";
    22.  
    23. $arr_meta_tags['news'] = array ('1' => array('date' => '09/12/2008', 'title' => 'Смена банковских реквизитов', 'text' => 'Уважаемые клиенты, обращаем Ваше внимание на то, что с 29 октября 2008 года у нас сменились реквизиты.'), '2' => array('date' => '11/12/2008', 'title' => 'Обновление линейки тарифных планов', 'text' => 'Теперь на всех наших тарифах еще больше места, еще больше доменов.'));
    24.  
    25.  
    26. /********************************** производим анализ ************************/
    27.  
    28. if (!empty($_REQUEST['page']) && $_REQUEST['page'] == "about") {
    29.     $arr_meta_tags['content'] = "С каждым днем растет число сайтов созданных для развлечений – это сайты об играх, фан сайты, сайты досуга, в том числе «домашние» страницы и т.д. Никогда еще не было так просто, чем сегодня, открыть свой сайт. И если для бизнес проектов важным аспектом выбора хостинга является стабильность и надежность, то для некоммерческих, малобюджетных сайтов главным оставалось и остается – доступность, т.е. невысокая цена. Мы предлагаем уникальное решение, делая свои услуги доступным для всех пользователей сети и даем гарантии качества и надежности.";}
    30.  
    31.  
    32. if (!empty($_REQUEST['page']) && $_REQUEST['page'] == "our_clients") {
    33.     $arr_meta_tags['content'] = "Уважаемые клиенты, уважаемые пользователи!
    34. Коллектив компании Hostland.Ru от всей души поздравляет Вас с наступающим новым годом.
    35. Этот год был очень насыщенным для нашей компании, мы славно потрудились, но многое впереди!
    36. Мы поздравляем Вас, желаем всем успехов в бизнесе, благополучия в семье и крепкого здоровья!
    37. }
    38.  
    39.  
    40. function ShowTree($ParentID, $lvl) {
    41. global $link;
    42. global $lvl;
    43. $lvl++;
    44. $sSQL="SELECT id, name, title, description, pages, ref FROM categories WHERE ref=".$ParentID." ORDER BY title";
    45. $result=mysql_query($sSQL, $link);
    46. if (mysql_num_rows($result) > 0) {
    47. echo("<UL>\n");
    48. while ( $row = mysql_fetch_array($result) ) {
    49. $ID1 = $row["id"];
    50. echo("<LI>\n");
    51. echo("<A HREF=\""."?ID=".$ID1."\">".$row["title"]."</A>"."  \n");
    52. ShowTree($ID1, $lvl);
    53. $lvl--;
    54. }
    55. echo("</UL>\n");
    56. }
    57. }
    58. ShowTree(0, 0);
    59.  
    60. $select = mysql_query("SELECT * FROM `categories`");
    61. do{
    62.  $users[] = $sel;
    63. }while($sel = mysql_fetch_array($select));
    64.  
    65. $smarty->assign('users', $users);
    66. mysql_close($link);
    67.  
    68. /************* передаем значение переменных php в переменные smarty *************/
    69. $smarty->assign('title',$arr_meta_tags['title']);
    70. $smarty->assign('keywords',$arr_meta_tags['keywords']);
    71. $smarty->assign('description',$arr_meta_tags['description']);
    72. $smarty->assign('news',$arr_meta_tags['news']);
    73. $smarty->assign('custid',$arr_meta_tags['custid'] );
    74. $smarty->assign('content',$arr_meta_tags['content']);
    75. $smarty->plugins_dir[] = 'plugins';
    76. $news_tpl = $smarty->fetch("news.tpl");
    77. $smarty->assign('blok_news',$news_tpl);
    78.  
    79. $tree1_tpl = $smarty->fetch("tree1.tpl");
    80. $smarty->assign('blok_tree',$tree1_tpl);
    81.  
    82. /*********************** запускаем показ шаблона smarty ************************/
    83. $smarty->display("index.tpl");
    84.  
    85. ?>
     
  2. Anneta

    Anneta Активный пользователь

    С нами с:
    7 окт 2010
    Сообщения:
    4
    Симпатии:
    0
    Я думаю должен получиться раскрывающийся список что-то типа этого:

    [​IMG]

    Но получается пока что только вот так ((:)

    [​IMG]

    Код шаблона:

    {if $users}
    <ul class='users'>
    {foreach from=$users item="item"}
    <li>{$item.title}
    {if $item.subtree}
    {include file="tree1.tpl" users=$item.subtree}
    {/if}
    </li>
    {/foreach}
    </ul>
    {/if}
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Anneta
    может ну его нафик шаблоны эти? чем вас чистый пхп не радует?
     
  4. Anneta

    Anneta Активный пользователь

    С нами с:
    7 окт 2010
    Сообщения:
    4
    Симпатии:
    0
    igordata
    в тестовом задание для устройства на работу было условие вывести дерево каталога в шаблонизаторе Smarty, а теперь мне просто самой уже интересно, как же это можно реализовать...
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Хрен его знает в смарти особо не копался, но есть как минимум три пути:
    1)Если смарти умеет рекурсивно подключать текущий шаблон, то так и делаем.
    2)Если смарти может создать функцию, то делаем рекурсию через функцию.
    3)Если смарти может работать со ссылками на переменные, то можно извращаться со ссылками.

    Вот здесь есть про деревья. По ссылкам в том топике есть море информации как хранить, извлекать и выводить деревья.
    Конкретно еще вот здесь есть как вывести дерево через рекурсивные шаблоны.