Здравствуйте) подскажите, как можно реализовать вывод каталога товаров неограниченного уровня вложенности в шаблоне Smarty... index.php PHP: <?php require_once("./cnf/config.php"); require_once("./include/include.php"); /*********************** подключаем библиотеку smarty ***********************/ define('SMARTY_DIR','./smarty_library/'); require(SMARTY_DIR.'Smarty.class.php'); $smarty = new Smarty ();//обьект smarty $smarty->template_dir='./tpl/templates/';//указываем путь к шаблонам $smarty->compile_dir='./tpl/templates_c/'; $smarty->config_dir='./tpl/configs/'; $smarty->cache_dir='./tpl/cache/'; /***************************** создаем переменные php ************************/ $arr_meta_tags['title'] = "Мой личный хостинговый сайт"; $arr_meta_tags['keywords'] = "хостинг, площадка, хостинг-услуги"; $arr_meta_tags['description'] = "Лучший хостинговый сайт предоставит хостинг-услуги по оптимальным ценам"; $arr_meta_tags['content'] = "Хостинг – это услуга, по размещению вашего сайта на сервере, за которым следят квалифицированные специалисты, поддерживающие его работоспособность 24 часа в сутки и 7 дней в неделю. Не многие хостинг-компании способны предоставить хорошие условия, и только единицы могут дать приемлемое для вас соотношение цены и качества. Таковой компанией является Hostland."; $arr_meta_tags['news'] = array ('1' => array('date' => '09/12/2008', 'title' => 'Смена банковских реквизитов', 'text' => 'Уважаемые клиенты, обращаем Ваше внимание на то, что с 29 октября 2008 года у нас сменились реквизиты.'), '2' => array('date' => '11/12/2008', 'title' => 'Обновление линейки тарифных планов', 'text' => 'Теперь на всех наших тарифах еще больше места, еще больше доменов.')); /********************************** производим анализ ************************/ if (!empty($_REQUEST['page']) && $_REQUEST['page'] == "about") { $arr_meta_tags['content'] = "С каждым днем растет число сайтов созданных для развлечений – это сайты об играх, фан сайты, сайты досуга, в том числе «домашние» страницы и т.д. Никогда еще не было так просто, чем сегодня, открыть свой сайт. И если для бизнес проектов важным аспектом выбора хостинга является стабильность и надежность, то для некоммерческих, малобюджетных сайтов главным оставалось и остается – доступность, т.е. невысокая цена. Мы предлагаем уникальное решение, делая свои услуги доступным для всех пользователей сети и даем гарантии качества и надежности.";} if (!empty($_REQUEST['page']) && $_REQUEST['page'] == "our_clients") { $arr_meta_tags['content'] = "Уважаемые клиенты, уважаемые пользователи! Коллектив компании Hostland.Ru от всей души поздравляет Вас с наступающим новым годом. Этот год был очень насыщенным для нашей компании, мы славно потрудились, но многое впереди! Мы поздравляем Вас, желаем всем успехов в бизнесе, благополучия в семье и крепкого здоровья! } function ShowTree($ParentID, $lvl) { global $link; global $lvl; $lvl++; $sSQL="SELECT id, name, title, description, pages, ref FROM categories WHERE ref=".$ParentID." ORDER BY title"; $result=mysql_query($sSQL, $link); if (mysql_num_rows($result) > 0) { echo("<UL>\n"); while ( $row = mysql_fetch_array($result) ) { $ID1 = $row["id"]; echo("<LI>\n"); echo("<A HREF=\""."?ID=".$ID1."\">".$row["title"]."</A>"." \n"); ShowTree($ID1, $lvl); $lvl--; } echo("</UL>\n"); } } ShowTree(0, 0); $select = mysql_query("SELECT * FROM `categories`"); do{ $users[] = $sel; }while($sel = mysql_fetch_array($select)); $smarty->assign('users', $users); mysql_close($link); /************* передаем значение переменных php в переменные smarty *************/ $smarty->assign('title',$arr_meta_tags['title']); $smarty->assign('keywords',$arr_meta_tags['keywords']); $smarty->assign('description',$arr_meta_tags['description']); $smarty->assign('news',$arr_meta_tags['news']); $smarty->assign('custid',$arr_meta_tags['custid'] ); $smarty->assign('content',$arr_meta_tags['content']); $smarty->plugins_dir[] = 'plugins'; $news_tpl = $smarty->fetch("news.tpl"); $smarty->assign('blok_news',$news_tpl); $tree1_tpl = $smarty->fetch("tree1.tpl"); $smarty->assign('blok_tree',$tree1_tpl); /*********************** запускаем показ шаблона smarty ************************/ $smarty->display("index.tpl"); ?>
Я думаю должен получиться раскрывающийся список что-то типа этого: Но получается пока что только вот так (( Код шаблона: {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}
igordata в тестовом задание для устройства на работу было условие вывести дерево каталога в шаблонизаторе Smarty, а теперь мне просто самой уже интересно, как же это можно реализовать...
Хрен его знает в смарти особо не копался, но есть как минимум три пути: 1)Если смарти умеет рекурсивно подключать текущий шаблон, то так и делаем. 2)Если смарти может создать функцию, то делаем рекурсию через функцию. 3)Если смарти может работать со ссылками на переменные, то можно извращаться со ссылками. Вот здесь есть про деревья. По ссылкам в том топике есть море информации как хранить, извлекать и выводить деревья. Конкретно еще вот здесь есть как вывести дерево через рекурсивные шаблоны.