Перейти к содержимому


Фотография
- - - - -

Ограничение глубины дочерних категорий в фильтре Item Category

item category

Лучший Ответ Станислав , 17 August 2013 - 09:52

Элемент фильтра:

media\zoo\applications\jbuniversal\framework\render\filter\element.category.php - для стандартного вида

media\zoo\applications\jbuniversal\framework\render\filter\element.category.chosen.php - для дерева с поиском

 

Дерево строится вызовом:

$result = $this->app->tree->buildList(0, $this->app->tree->build($allCategories, 'Category'));

Хелпер, из которого вызывается buildList, находится здесь:

administrator\components\com_zoo\helpers\tree.php

 

Интересующая нас функция:

public function buildList($id, $objects, $list = array(), $prefix = '<sup>|_</sup>&nbsp;', $spacer = '.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', $indent = '', $level = 0, $maxlevel = 9999) {

    if (isset($objects[$id]) && $level <= $maxlevel) {
        foreach ($objects[$id]->getChildren() as $child) {
            // set treename
	    $id = $child->id;
	    $list[$id] = $child;
	    $list[$id]->treename = $indent.($indent == '' ? $child->name : $prefix.$child->name);
	    $list = $this->buildList($id, $objects, $list, $prefix, $spacer, $indent.$spacer, $level + 1, $maxlevel);
	}
    }

    return $list;
}

Обратите внимание на $maxlevel в последней функции. Сейчас в этот параметр по умолчанию передается значение 9999, что по мнению разработчиков Zoo эквивалентно бесконечности  ;D  Ну а вы можете поставить свое значение. 2,3, 4 и. т.д.

НО!

1) При обновлении ZOO ваши изменения могут затереться.

2) При изменении значения, указанная вложенность будет распространяться на абсолютно все иерерахические списки в ваших приложениях.

 

Также можно вызывать функцию из element.category.php (element.category.chosen.php), задействовав все аргументы:

$result = $this->app->tree->buildList(0, $this->app->tree->build($allCategories, 'Category'), $list = array(), $prefix = '<sup>|_</sup>&nbsp;', $spacer = '.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', $indent = '', $level = 0, $maxlevel=3);

Решается проблема глобальности ограничения вложенности до 3 уровней, но в то же время, этот апдейт может затереться уже при обновлении JBzoo. В любом случае, вопрос решается только хаком, так что надо будет внимательно обновляться и восстанавливать хак после обновлений.

 

Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 5

#1 Константин

Константин

Отправлено 16 August 2013 - 21:48

Всем доброго времени суток!

 

Пример структуры каталога:

 

-Каталог

---Категория1

------Подкатегория1

---------Еще вложенность1

---------Еще вложенность2

---------Еще вложенность3

------Подкатегория2

------Подкатегория3

 

 

1) Требуется ограничить глубину дочерних категорий в фильтре Item Category до (Подкатегорий 1-3) с сохранением в фильтре вида списка: "Дерево со вложенностями".

2) Где можно изменить внутреннее оформление в фильтре вида списка: "Дерево со вложенностями"? 


  • 0

#2 Станислав

Станислав

Отправлено 17 August 2013 - 09:52   Лучший Ответ

Элемент фильтра:

media\zoo\applications\jbuniversal\framework\render\filter\element.category.php - для стандартного вида

media\zoo\applications\jbuniversal\framework\render\filter\element.category.chosen.php - для дерева с поиском

 

Дерево строится вызовом:

$result = $this->app->tree->buildList(0, $this->app->tree->build($allCategories, 'Category'));

Хелпер, из которого вызывается buildList, находится здесь:

administrator\components\com_zoo\helpers\tree.php

 

Интересующая нас функция:

public function buildList($id, $objects, $list = array(), $prefix = '<sup>|_</sup>&nbsp;', $spacer = '.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', $indent = '', $level = 0, $maxlevel = 9999) {

    if (isset($objects[$id]) && $level <= $maxlevel) {
        foreach ($objects[$id]->getChildren() as $child) {
            // set treename
	    $id = $child->id;
	    $list[$id] = $child;
	    $list[$id]->treename = $indent.($indent == '' ? $child->name : $prefix.$child->name);
	    $list = $this->buildList($id, $objects, $list, $prefix, $spacer, $indent.$spacer, $level + 1, $maxlevel);
	}
    }

    return $list;
}

Обратите внимание на $maxlevel в последней функции. Сейчас в этот параметр по умолчанию передается значение 9999, что по мнению разработчиков Zoo эквивалентно бесконечности  ;D  Ну а вы можете поставить свое значение. 2,3, 4 и. т.д.

НО!

1) При обновлении ZOO ваши изменения могут затереться.

2) При изменении значения, указанная вложенность будет распространяться на абсолютно все иерерахические списки в ваших приложениях.

 

Также можно вызывать функцию из element.category.php (element.category.chosen.php), задействовав все аргументы:

$result = $this->app->tree->buildList(0, $this->app->tree->build($allCategories, 'Category'), $list = array(), $prefix = '<sup>|_</sup>&nbsp;', $spacer = '.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', $indent = '', $level = 0, $maxlevel=3);

Решается проблема глобальности ограничения вложенности до 3 уровней, но в то же время, этот апдейт может затереться уже при обновлении JBzoo. В любом случае, вопрос решается только хаком, так что надо будет внимательно обновляться и восстанавливать хак после обновлений.

 


  • 1

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 


#3 Константин

Константин

Отправлено 20 August 2013 - 19:30

Спасибо за раскрытый ответ! С глубиной каталога разобрался, но вот визуальное оформление для списка: "Дерево со вложенностями" не знаю как поменять. Мне требуется убрать в отображении подкатегории (точку, прямой слэш, нижний слэш) и заменить вместо этих трёх знаков на одно тире.  Как можно это сделать?


  • 0

#4 SmetDenis

SmetDenis

Отправлено 20 August 2013 - 19:57

Спасибо за раскрытый ответ! С глубиной каталога разобрался, но вот визуальное оформление для списка: "Дерево со вложенностями" не знаю как поменять. Мне требуется убрать в отображении подкатегории (точку, прямой слэш, нижний слэш) и заменить вместо этих трёх знаков на одно тире.  Как можно это сделать?

На сколько помню, вложенный список создается тут
administrator\components\com_zoo\helpers\tree.php метод buildList()
administrator\components\com_zoo\helpers\html.php метод categoryList()

в аргументах этих функций есть искомые символы.

Внимание! Изменения этих файлов может затронуть даже админку Zoo
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#5 Константин

Константин

Отправлено 27 August 2013 - 20:30

Ок. Разобрался! Станислав ранее тоже написал где всё менять, но тогда что то не получилось. Спасибо, всё меняется как хотел.  :)


Сообщение отредактировал Константин: 27 August 2013 - 20:31

  • 0

#6 Sliapy

Sliapy

Отправлено 27 August 2013 - 20:35

Можно посмотреть (хотя бы на скриншотах), что в итоге получилось?


  • 0
[color=#aa0000]Не забывайте нажимать кнопку "Вопрос Решён" под сообщением, которое решило Вашу проблему.[/color]





Темы с аналогичным тегами item category

Click to return to top of page in style!