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

Тема в разделе "Как сделать...", создана пользователем rasandrey, 13 фев 2012.

  1. rasandrey

    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, а там уже перебирать и выводить, подскажите, плиз, как это правильно сделать
     
  2. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    634
    Симпатии:
    1.420
    В коде
    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}
    
     
  3. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    Код:
    {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 все равно не работает
     
  4. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6