четверг, 20 ноября 2014 г.

Дерево категорий с раскрытыми 2 уровнями + скрытие определенной категории вместе с ее подкатегориями

Цель увидеть раскрытым category_tree со 2м уровнем и не видеть техническую категорию, в которой находятся товары, готовящиеся к добавлению или снятые временно с витрины.

1. Удаляем все из файла category_tree.html и пишем там

{newtree}

Затем в папке /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 AND is_hidden=0 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 class="l1" 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>';
  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>';
  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;
  }}
?>

2. для скрытия категории необходимо сделать

в published/SC/html/scripts/templates/backend/category.html

Код:

<tr>
    <td class="lcolumnr">{"is_hidden"|translate}:</td>
    <td><input type="checkbox" class="checknomarging" name="is_hidden" value="1" {if $CategoryInfo.is_hidden eq 1} checked="checked"{/if}/></td>
</tr>

создать в SC_categories колонку is_hidden со значением по умолчанию 0

Далее для сохранения изменений
нужно в published/SC/html/scripts/modules/test/_methods/b_category_settings.php где-то 113 строчка дописать$categoryEntry->is_hidden = $this->getData('is_hidden');
в массив $categoryEntry = new Category;

чтобы получить is_hidden в шаблон, чтоб работать с ним, нужно заменить в published/SC/html/scripts/core_functions/category_functions.php в функции function catGetSubCategoriesSingleLayer( $categoryID ) вот на этот запрос:

Код:

$q = db_query("SELECT categoryID,is_hidden, ".LanguagesManager::sql_prepareField('name')." AS name, products_count, slug FROM ".
            CATEGORIES_TABLE." WHERE parent='$categoryID' order by sort_order, name");

Комментариев нет:

Отправить комментарий