[Помощь] Развернуть дерево категорий webasyst на один уровень

Тема в разделе "WebAsyst", создана пользователем vicsk, 24 май 2012.

Модераторы: mdss
  1. vicsk

    vicsk Постоялец

    Регистр.:
    19 янв 2010
    Сообщения:
    147
    Симпатии:
    8
    Как развернуть дерево категорий webasyst на один уровень,при стандартном выводе дерева категорий webasyst, т.е.чтобы все главные родительские категории первого уровня были развернуты,ну а их подкатегории были свернуты?
     
  2. kadurinho

    kadurinho Shop Script

    Moderator
    Регистр.:
    21 июн 2011
    Сообщения:
    618
    Симпатии:
    248
    Удаляем все из файла category_tree.html и пишем там {newtree}
    В папке /kernel/includes/smarty/plugins создаем файл function.newtree.php, в котором пишем:

    Код:
    <?php
      function smarty_function_newtree($params, &$smarty){
    $disp='';
      $disp.='<ul id="navmenu-v">';
      $sql='SELECT categoryID, slug, parent, '.LanguagesManager::sql_prepareField('name').' AS name from '.CATEGORIES_TABLE. ' where parent=1 order by sort_order,name';
      if($r=mysql_query($sql))
      while($res=mysql_fetch_assoc($r)){
      $disp.='<li class="parent';
      if($_REQUEST['categoryID'] == $res['categoryID']) $disp.='_current';
      if($res['slug']!='')
      $disp.='"><a href="/category/'.$res['slug'].'/">'.$res['name'].'</a>';
      else
      $disp.='"><a href="?categoryID='.$res['categoryID'].'">'.$res['name'].'</a>';
      $disp.=subcat($res['categoryID']).'</li>';
      }
    $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 sort_order, name';
      if($r=mysql_query($sql)){
          if(mysql_num_rows($r)>0){
            $disp.='<ul>';
          while($res=mysql_fetch_assoc($r)){
          $disp.='<li class="child';
          if($_REQUEST['categoryID'] == $res['categoryID']) $disp.='_current';
          if($res['slug']!='')
            $disp.='"><a href="/category/'.$res['slug'].'/">'.$res['name'].'</a>';
          else
            $disp.='"><a href="?categoryID='.$res['categoryID'].'">'.$res['name'].'</a>';
          $disp.=subcat($res['categoryID']).'</li>';;
          }
          $disp.='</ul>';
          }
      }
      return $disp;
      }
    ?>
     
  3. vicsk

    vicsk Постоялец

    Регистр.:
    19 янв 2010
    Сообщения:
    147
    Симпатии:
    8
    Данный способ развернул мне все категории,как развернуть только первый уровень,при этом чтобы и другие открывались в обычном режиме?
     
  4. vicsk

    vicsk Постоялец

    Регистр.:
    19 янв 2010
    Сообщения:
    147
    Симпатии:
    8
    По примеру выше реализовал так:
    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 sort_order,name';
      if(
    $r=mysql_query($sql))
      while(
    $res=mysql_fetch_assoc($r)){
      
    $disp.='<li class="parent';
      if(
    $_GET['categoryID'] == $res['categoryID']) $disp.='_current';
      if(
    $res['slug']!='')
      
    $disp.='"><a href="/category/'.$res['slug'].'/">'.$res['name'].'</a>';
      else
      
    $disp.='"><a href="?categoryID='.$res['categoryID'].'">'.$res['name'].'</a>';
      
    $disp.=subcat($res['categoryID']).'</li>';
      }
    $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 sort_order, name';
      if(
    $r=mysql_query($sql)){
      
    $disp.='<ul style="padding-left:25px">';
      while(
    $res=mysql_fetch_assoc($r)){
      
    $disp.='<li class="child';
      if(
    $_GET['categoryID'] == $res['categoryID']) $disp.='_current';
      if(
    $res['slug']!='')
      
    $disp.='"><a href="/category/'.$res['slug'].'/">'.$res['name'].'</a>';
      else
      
    $disp.='"><a href="?categoryID='.$res['categoryID'].'">'.$res['name'].'</a>';
      
    $disp.=subcatt($res['categoryID']).'</li>';
      }
      
    $disp.='</ul>';
      }
      return 
    $disp;
      }
     
    function 
    subcatt($parid){
    $sql2='select parent from SC_categories where categoryID='.$_GET['categoryID'];
    if(
    $r2=mysql_query($sql2)){
      
    $res2=mysql_fetch_assoc($r2);
      
    $disp='';
      
    $sql='SELECT categoryID, slug, parent, '.LanguagesManager::sql_prepareField('name').' AS name from '.CATEGORIES_TABLE' where parent='.$parid.' order by sort_order, name';
    if(
    $r=mysql_query($sql)){
      
    $disp.='<ul style="padding-left:25px">';
      while(
    $res=mysql_fetch_assoc($r)){
     
      if(
    $res2['parent']==$parid || $_GET['categoryID'] == $res['parent'] ) {
      
    $disp.='<li class="children';
      if(
    $_GET['categoryID'] == $res['categoryID']) $disp.='_current';
      if(
    $res['slug']!='')
      
    $disp.='"><a href="/category/'.$res['slug'].'/">'.$res['name'].'</a>';
      else
      
    $disp.='"><a href="?categoryID='.$res['categoryID'].'">'.$res['name'].'</a>';
      
    $disp.=subcatt($res['categoryID']).'</li>';
     
    }
      }
      
    $disp.='</ul>';
      }
      return 
    $disp;
      }}
    ?>
    Нор данный пример работает для 3 уровней вложенности,как реализовать для 4 уровня?Как поимаю нужно дописать еще одну функцию,на примере 3 уровня:
    PHP:
    function subcatt($parid){
    $sql2='select parent from SC_categories where categoryID='.$_GET['categoryID'];
    if(
    $r2=mysql_query($sql2)){
      
    $res2=mysql_fetch_assoc($r2);
      
    $disp='';
      
    $sql='SELECT categoryID, slug, parent, '.LanguagesManager::sql_prepareField('name').' AS name from '.CATEGORIES_TABLE' where parent='.$parid.' order by sort_order, name';
    if(
    $r=mysql_query($sql)){
      
    $disp.='<ul style="padding-left:25px">';
      while(
    $res=mysql_fetch_assoc($r)){
     
      if(
    $res2['parent']==$parid || $_GET['categoryID'] == $res['parent'] ) {
      
    $disp.='<li class="children';
      if(
    $_GET['categoryID'] == $res['categoryID']) $disp.='_current';
      if(
    $res['slug']!='')
      
    $disp.='"><a href="/category/'.$res['slug'].'/">'.$res['name'].'</a>';
      else
      
    $disp.='"><a href="?categoryID='.$res['categoryID'].'">'.$res['name'].'</a>';
      
    $disp.=subcatt($res['categoryID']).'</li>';
     
    }
      }
      
    $disp.='</ul>';
      }
      return 
    $disp;
      }
    Помогите дописать?
     
  5. kadurinho

    kadurinho Shop Script

    Moderator
    Регистр.:
    21 июн 2011
    Сообщения:
    618
    Симпатии:
    248
    Вас не поймешь. Изначально вам требовалось развернуть только родительские категории, а теперь уже надо развернуть все категории. Выше мной указанный способ разворачивает абсолютно все категории которые есть в магазине
     
  6. vicsk

    vicsk Постоялец

    Регистр.:
    19 янв 2010
    Сообщения:
    147
    Симпатии:
    8
    "Как развернуть дерево категорий webasyst на один уровень,при стандартном выводе дерева категорий webasyst, т.е.чтобы все главные родительские категории первого уровня были развернуты,ну а их подкатегории были свернуты?"
    Где здесь вы увидили о всех категориях?
     
  7. IgorFIN

    IgorFIN Постоялец

    Регистр.:
    12 янв 2009
    Сообщения:
    75
    Симпатии:
    35
    Отличное меню. Еще бы прикрутить к нему... если в категории нет товара для отображения, этот пункт меню не отображался.