Развернутое древо категорий (category_tree.html)

Тема в разделе "WebAsyst", создана пользователем Vehement, 7 авг 2009.

Статус темы:
Закрыта.
Модераторы: mdss
  1. Vehement

    Vehement Писатель

    Регистр.:
    27 окт 2007
    Сообщения:
    7
    Симпатии:
    3
    Мне необходимо сделать развернутое древо категорий с подкатегориями на главной.

    Долго рылся в поисках решения задачи. На этом форуме ниодного внятного ответа, а плодящихся вопросов тьма.

    Решение нашел на официальном форуме. Вот так его реализовал пользователь webcomplit:

    1. Вместо
    Код:
    <!-- cpt_container_start -->{cpt_category_tree}<!-- cpt_container_end -->
    вставляем в нужном вам месте
    Код:
    <!-- cpt_container_start -->{newtree}<!-- cpt_container_end -->
    2. Идем в /kernel/includes/smarty/plugins/ и создаем там файл function.newtree.php следующего содержания:

    Код:
    <?php
    function smarty_function_newtree($params, &$smarty){
        
        $disp='';
        $disp.='<ul>';
        $sql='SELECT categoryID, slug, parent, '.LanguagesManager::sql_prepareField('name').' AS name from '.CATEGORIES_TABLE. ' where parent=1 order by name';
        if($r=mysql_query($sql))
            while($res=mysql_fetch_assoc($r)){
                $disp.='<li class="parent'; 
                if($_REQUEST['categoryID'] == $res['categoryID']) $disp.='_current';
                $disp.='"><span class="bullet">&nbsp;</span><a href="?categoryID='.$res['categoryID'].'">'.$res['name'].'</a></li>';
                $disp.=subcat($res['categoryID']);
            }
            
        $disp.='</ul>';
        return $disp;
    }
    
    function subcat($parid){
        $disp='';
        $sql='SELECT categoryID, slug, parent, '.LanguagesManager::sql_prepareField('name').' AS name from '.CATEGORIES_TABLE. ' where parent='.$parid.' order by name';
        if($r=mysql_query($sql))
            while($res=mysql_fetch_assoc($r)){
                $disp.='<li class="child'; 
                if($_REQUEST['categoryID'] == $res['categoryID']) $disp.='_current';
                $disp.='"><span class="bullet">&nbsp;</span><span class="tab">&nbsp;</span><a href="?categoryID='.$res['categoryID'].'">'.$res['name'].'</a></li>';
                $disp.=subcat($res['categoryID']);
            }
        return $disp;
    }
    
    ?>
    

    :az:
     
    Ins1ne и mytrance нравится это.
  2. mytrance

    mytrance

    Регистр.:
    15 дек 2007
    Сообщения:
    347
    Симпатии:
    120
    Да, работает. Но при включенном ЧПУ адреса категорий всё равно выводятся в обычном формате ?categoryID=557. Нужно откорректировать вот эту ссылку:
    <a href="?categoryID='.$res['categoryID'].'">'.$res['name'].'</a>
    Кто в курсе, как поправить?
     
  3. mytrance

    mytrance

    Регистр.:
    15 дек 2007
    Сообщения:
    347
    Симпатии:
    120
    Если кто подскажет, как поправить баг с ЧПУ, то в этой же теме выложу готовое решение для дерева категорий с использованием jQuery. Пример тут: http://ruseller.com/lessons/les209/example/index_collapsed.html
     
  4. arriadna

    arriadna Постоялец

    Регистр.:
    6 июн 2008
    Сообщения:
    133
    Симпатии:
    17
    Вот тут есть полноценное решение. И похоже, что сложность ЧПУ тоде решена.

    http://easyweb.org.ua/?p=252
     
    mytrance нравится это.
Статус темы:
Закрыта.