Уважаемые посетители! Сообщаем вам, что Служба Заботы прекратила поддержку UMI.CMS на форуме.
Для связи со Службой Заботы пользуйтесь формой обратной связи
Блок фильтрации(вывод определенных элементов справочника)
Доброго дня есть задача выводить блок фильтрации в категориях с определенными ограничениями:
- клиенту нужно чтобы в теге select выводились не все элементы справочника, а только те, которые присутствуют в объектах каталога определенной категории.
Поясню, допустим есть страница каталога "Ветрогенераторы" и в этом разделе страницы товаров. В этих страницах есть группа полей "технические характеристики", одно из полей - "производитель". Вот нужно в selct элемент включить не все значения справочника "производитель" а только те, которые присутствуют(назначены) в страницах товаров текущего раздела. Формирование списка происходит в классе data метод parseSearchRelation. Как выбрать все значения производителей в текущем разделе, я пока не пойму.
Если кто в курсе подскажите, пожалуйста, куда копать.
Цитироватьdomencom
(30.01.2012 11:38)
Re: Блок фильтрации(вывод определенных элементов справочника)
Посмотрите аналогичное решение
http://wiki.umisoft.ru/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D0%B4%D0%BB%D1%8F_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0_%D0%BE%D1%82%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B2%D1%8B%D0%BF%D0%B0%D0%B4%D0%B0%D1%8E%D1%89%D0%B5%D0%B3%D0%BE_%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0
ЦитироватьVladimir
(30.01.2012 11:47)
Re: Блок фильтрации(вывод определенных элементов справочника)
Спасибо, но насколько я понимаю это устаревший подход и такого класса, как selector уже нет.
Цитироватьdomencom
(30.01.2012 13:17)
Re: Блок фильтрации(вывод определенных элементов справочника)
Реализовал по-своему в __custom_catalog классе. "Расширил" метод parseSearchRelation() в этом классе, теперь он вызывается здесь. Имя поля получаем через
$name = $field->getName();
Дальше вызываю свою функцию:
$propIdsInCatalog = $this->getCatalogPropIdsByName($name);
Сам метод, который возвращает значения(или id) элементов справочника, которые присутствуют в его дочерних объектах каталога, для свойства с именем $name.
public function getCatalogPropIdsByName($propName)
{
// получаем id текущей страницы у нас это будет раздел/категория
$categoryId = cmsController::getInstance()->getCurrentElementId();
// получаем экземпляр коллекции
$hierarchy = umiHierarchy::getInstance();
$is_allow_inactive = false;
$is_allow_ivisible = true;
$depth = 0;
$childIds = $hierarchy->getChilds($categoryId, $is_allow_inactive,
$is_allow_ivisible, $depth);
if(empty($childIds)) {
return false;
}
$propValues = array();
foreach ($childIds as $id => $arrSubChilds) {
$hierarchyElement = $hierarchy->getElement($id);
$propertyVal = $hierarchyElement->getValue($propName);
if(!empty($propertyVal) && !in_array($propertyVal, $propValues)) {
$propValues[] = $propertyVal;
}
}
return $propValues;
}
Цитироватьdomencom
(30.01.2012 17:18)
Re: Блок фильтрации(вывод определенных элементов справочника)
PS почему нет возможности подсветки кода, для меня загадка :(
Цитироватьdomencom
(30.01.2012 17:20)
Re: Блок фильтрации(вывод определенных элементов справочника)
класса селектор нет? вы точно уверены?
Ваш способ вполне нормальный, только мне как посетителю еще бы было удобно видеть список упорядоченный по названию.
Разница с selector будет когда вы захотите выбирать не 0 уровней, а несколько
ЦитироватьVladimir
(30.01.2012 17:31)
Re: Блок фильтрации(вывод определенных элементов справочника)
>> класса селектор нет? вы точно уверены?
Поиск IDE не дал результатов, насколько я понял в моей версии umiSelection используется.
>>только мне как посетителю еще бы было удобно видеть список упорядоченный по названию.
Соглашусь, нужно добавить.
>> Разница с selector будет когда вы захотите выбирать не 0 уровней, а несколько
Ну, в моем случае не актуально, а так скорее всего нужна проверка типа страницы, чтобы не "бегать" по ненужным, теряя в производительности. Сроки жмут :( а с ЮМИ знаком плохо, посему пока оставлю без вложенности.
Цитироватьdomencom
(30.01.2012 18:09)
Re: Блок фильтрации(вывод определенных элементов справочника)
Оказывается есть ещё и элементы с множественным выбором, и они себя ведут немного по-другому. А именно: переменная $propertyVal будет массивом значений.
Поэтому метод переделал
http://codepaste.ru/9257/ Цитироватьdomencom
(07.02.2012 19:39)