Иерарзический список категорий в массив

rasandrey

Участник
Регистрация
2 Апр 2009
Сообщения
214
Реакции
6
Приветствую!
Есть функция, которая достает и выводит из базы записи, многоуровневого меню:

PHP:
$q = q("SELECT `id`, `parent`, `name` FROM `category` order by `pos` ASC") ;
$category = array() ;
while($row = mysql_fetch_assoc($q)) $category[$row['parent']][] =  $row ;
 
function build_tree($category, $parent) {
    if(is_array($category) && count($category[$parent]) > 0) {
        $tree = '<ul>' ;
        foreach($category[$parent] as $row) {
            $tree .= '<li><a href="'.$row['id'].'">'.$row['name']."</a>" ;
            $tree .=  build_tree($category,$row['id']) ;
            $tree .= '</li>' ;       
        }
        $tree .= '</ul>' ;
    } else return null ;         
    return $tree;
}
 
echo build_tree($category,0) ;

Код:
CREATE TABLE IF NOT EXISTS `category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `active` int(11) NOT NULL,
  `parent` int(11) NOT NULL,
  `url` varchar(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  `keywords` varchar(255) NOT NULL,
  `description` varchar(255) NOT NULL,
  `image` varchar(255) NOT NULL,
  `text` text NOT NULL,
  `pos` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;
 
--
-- Dumping data for table `category`
--
 
INSERT INTO `category` (`id`, `name`, `active`, `parent`, `url`, `title`, `keywords`, `description`, `image`, `text`, `pos`) VALUES
(1, 'Мобильные телефоны', 1, 0, 'mobilnye_telefony', 'Мобильные телефоны', 'Мобильные телефоны', 'Мобильные телефоны', '', 'Мобильные телефоны', 1),
(2, 'Бытовая техника', 1, 0, 'bytovaya_tehnika', 'Бытовая техника', 'Бытовая техника', 'Бытовая техника', '', 'Бытовая техника', 0),
(3, 'Пылесосы', 1, 2, 'pylesosy', 'Пылесосы', 'Пылесосы', 'Пылесосы', '', 'Пылесосы', 2),
(4, 'Миксеры ', 1, 2, 'miksery', 'Миксеры ', 'Миксеры ', 'Миксеры ', '', 'Миксеры ', 0);

Список категорий выводится как нужно, но проблема в том, что не могу построить массив для передачи в smarty, а там уже перебирать и выводить, подскажите, плиз, как это правильно сделать
 
В коде
PHP:
$q = q("SELECT `id`, `parent`, `name` FROM `category` order by `pos` ASC") ;
$category = array() ;
while($row = mysql_fetch_assoc($q)) $category[$row['parent']][] =  $row ;
 
$smarty->assign('category'=>$category);
В шаблоне
Код:
{function name=build_tree category=$category parent=$parent}
    {if(is_array($category) && count($category[$parent]) gt 0}
        <ul>
        {foreach($category.$parent as $row}
            <li><a href="{$row.$id}">{$row.$name}</a>
            {call name=build_tree category=$category parent=$row.$id}
            </li>
        {/foreach}
        </ul>
    {/if}
{/function}
 
{call name=build_tree category=$category parent=0}
 
Код:
{function name=build_tree category=$category parent=$parent}
    {if is_array($category) && count($category[$parent]) gt 0}
        <ul>
        {foreach $category.$parent as $row}
            <li><a href="{$row.$id}">{$row.$name}</a>
            {call name=build_tree category=$category parent=$row.$id}
            </li>
        {/foreach}
        </ul>
    {/if}
{/function}
 
{call name=build_tree category=$category parent=0}

были лишние 2 скобки, поправил, но код smarty все равно не работает
 
Назад
Сверху