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

vicsk

Постоялец
Регистрация
19 Янв 2010
Сообщения
147
Реакции
8
Как развернуть дерево категорий webasyst на один уровень,при стандартном выводе дерева категорий webasyst, т.е.чтобы все главные родительские категории первого уровня были развернуты,ну а их подкатегории были свернуты?
 
Удаляем все из файла 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;
  }
?>
 
Удаляем все из файла 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;
  }
?>
Данный способ развернул мне все категории,как развернуть только первый уровень,при этом чтобы и другие открывались в обычном режиме?
 
По примеру выше реализовал так:
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;
  }
Помогите дописать?
 
Вас не поймешь. Изначально вам требовалось развернуть только родительские категории, а теперь уже надо развернуть все категории. Выше мной указанный способ разворачивает абсолютно все категории которые есть в магазине
 
Вас не поймешь. Изначально вам требовалось развернуть только родительские категории, а теперь уже надо развернуть все категории. Выше мной указанный способ разворачивает абсолютно все категории которые есть в магазине
"Как развернуть дерево категорий webasyst на один уровень,при стандартном выводе дерева категорий webasyst, т.е.чтобы все главные родительские категории первого уровня были развернуты,ну а их подкатегории были свернуты?"
Где здесь вы увидили о всех категориях?
 
Удаляем все из файла 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;
  }
?>
Отличное меню. Еще бы прикрутить к нему... если в категории нет товара для отображения, этот пункт меню не отображался.
 
Назад
Сверху