Помогите) написать шаблон для вывода многоуровневого дерева...

Anneta

Новичок
Помогите) написать шаблон для вывода многоуровневого дерева...

Здравствуйте) подскажите, как можно реализовать вывод каталога товаров неограниченного уровня вложенности в шаблоне Smarty...
Вот скрипт на php, массив передан в переменную &users, может кто сталкивался с такой задачей:

<?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;
//echo $sel['id'], " - ", $sel['name'], " - ", $sel['title']," - ", $sel['ref'],"<br>";
}while($sel = mysql_fetch_array($select));
//echo $users;
$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");




?>
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
гуглить по фразе smarty recursion
 

SergKl

Новичок
Я делал так:
<body>
<?php
function make_tree($parent) {
global $sections;
$temp = $sections;
?>
<ul>
<?php

reset($temp);
while (list($key, $val) = each($temp)) {
if($val['parent'] == $parent) {
$name = $val['name'];
?>
<li><?php echo $name; ?>
<?php make_tree($val['id']); ?>
</li>
<?php
}
}

?>
</ul>
<?php
}
?>
<?php make_tree($val['id']); ?>

</body>
 

pehser

Новичок
PHP:
$objSmarty->assign("tree",array("element"=>array(array("name"    => "test1",
                                                       "element" => array(array("name"  => "test1.1"),
                                                                          array("name"  => "test1.2",
                                                                                "element" => array(array("name"  => "test1.2.1"),
                                                                                                   array("name"  => "test1.2.2"))))))));
echo $objSmarty->fetch("test.tpl");
test.tpl

PHP:
<html>
<body>
<ul>
{foreach from=$tree.element item=element}
   <li>{$element.name}</li>
   {if $element.element}
   <ul>{include file="test-recursion.tpl" element=$element.element}</ul>
   {/if}
{/foreach}
</ul>
</body>
</html>
test-recursion.tpl

PHP:
{foreach from=$element item=element}
   <li>{$element.name}</li>
   {if $element.element}
   <ul>{include file="test-recursion.tpl" element=$element.element}</ul>
   {/if}
{/foreach}
Результат
PHP:
<html>
<body>
<ul>
   <li>test1</li>
   <ul>   <li>test1.1</li>
   <ul></ul>
   <li>test1.2</li>
   <ul>   <li>test1.2.1</li>
   <ul></ul>
   <li>test1.2.2</li>
   <ul></ul>
</ul>
</ul>
</ul>
</body>
</html>
 
Сверху