*

andre

  • *
  • 35

Не выводить категории если нет товаров

Теперь заказчик захотел что бы не выводились в боксе категории, если к ним в данный момент не привязаны товары.

Поэтому расширил немного класс osC_CategoryTree в includes/classes/category_tree.php.

Добавлены методы

    function setShowEmptyNodes($isShow) {
       $this->show_empty_nodes = $isShow;
    }

    function getShowEmptyNodes() {
       return $this->show_empty_nodes;
    }

и атрибут

$show_empty_nodes = true;

и обработка в _buildBranch.

Нечто подобное уже было, но ваш вариант неплох. Проверю на днях...

*

Love

А это будет работать если товары привязаны но выключены на показ?

*

andre

  • *
  • 35

А это будет работать если товары привязаны но выключены на показ?

Сделано на подсчете товаров того же самого класса. Поэтому работает при $this->_show_total_products == true. Если false, то как и было.

Похоже это лучшее решение.

*

Love

Похоже это лучшее решение.
Только не понятное, описано огрызком, не для ...
Может не то сделал, скопировал только этот файл из архива и не заметил что пустые категории исчезли из бокса, зато увидел как они полетели в дизайне.

*

Love

Ну чего, у кого это решение работает?
Чего-то затишье.

*

andre

  • *
  • 35

Похоже это лучшее решение.
Только не понятное, описано огрызком, не для ...
Может не то сделал, скопировал только этот файл из архива и не заметил что пустые категории исчезли из бокса, зато увидел как они полетели в дизайне.

А можно по подробнее - что полетело в дизайне? Может чего не учел...

Там все просто:

в методе _buildBranch сразу после цикла добавлена строка:

        if (!$this->show_empty_nodes && $this->_show_total_products && $category['count'] == 0) continue;
и все. Но надо "выключить" показ пустых нодов в самом боксе, потому что по умолчанию стоит true - выводить пустые ноды.

В includes/modules/boxes/categories.php

   function initialize() {
      global $osC_CategoryTree, $cPath;

      $osC_CategoryTree->reset();
      $osC_CategoryTree->setCategoryPath($cPath, '<b>', '</b>');
      $osC_CategoryTree->setParentGroupString('', '');
      $osC_CategoryTree->setParentString('', '<br/>');
      $osC_CategoryTree->setChildString('<small>', '</small><br />');
      $osC_CategoryTree->setSpacerString('&nbsp;', 4);
      $osC_CategoryTree->setShowCategoryProductCount((BOX_CATEGORIES_SHOW_PRODUCT_COUNT == '1') ? true : false);
/*
 * Modified andre
 *
 * Не показывать категории к которым нет товаров
 */
      $osC_CategoryTree->setShowEmptyNodes(false);
/*
 * end
 */
      $this->_content = $osC_CategoryTree->getTree();
    }


Правда, немного расширил buildBranchArray. Там, по аналогии с getData, добавил элементов в массив результата:

было:


          $result[] = array('id' => $category_link,
                            'title' => str_repeat($this->spacer_string, $this->spacer_multiplier * $level) . $category['name']
          );

стало

          $result[] = array('id' => $category_link,
                            'title' => str_repeat($this->spacer_string, $this->spacer_multiplier * $level) . $category['name'],
          'name' => $category['name'],
          'image' => $category['image'],
          'count' => $category['count'],
          'category_id' => $category_id
          );

*

Love

Сейчас исчезли пустые категории. А в дизайне после внесения таких изменений теряется в боксес категорис вот это
      $osC_CategoryTree->setChildString('', '<br />');
На категориях, на подкатегориях остаются.

Мне и так не плохо
https://forum.oscommerce.ru/index.php?topic=265.0

*

andre

  • *
  • 35

Сейчас исчезли пустые категории. А в дизайне после внесения таких изменений теряется в боксес категорис вот это
      $osC_CategoryTree->setChildString('', '<br />');
На категориях, на подкатегориях остаются.

Мне и так не плохо
https://forum.oscommerce.ru/index.php?topic=265.0

Я не стал предлагать изменения в includes/modules/boxes/categories.php, слишком интимно. У многих свой дизайн. Что не написал - ваша правда - не доглядел.

Наверно, для общности и что бы не лезть каждый раз в исходники надо конфигурационный параметр ввести.

*

Love

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

Вот к примеру пришлось дизу вешать по образу osc 2.2 на osc 3, дак пришлось через category_tree разделить классы категории с подкатегориями, чтоб можно было стилями играть.