====== Добавление минимальных и максимальных значений свойств товаров и ярлыков ====== ==== Описание ==== У нас уже имеется решение которое корректирует работу фильтров для ярлыков. Однако фильтры бывают не всегда стандартными и для их корректной работы необходимы минимальное и максимальное значение какого-либо свойства. В стандартном контроллере уже есть метод addMinMaxPrice() который добавляет минимальное и максимальное значение цены товаров в группе. Однако метода, который бы добавлял минимальное и максимальное значение свойства товара или ярлыка нет. Вот пример такого фильтра, для корректной работы которого необходимо знать минимальное и максимальное значение дополнительных свойств: {{:private:koding:hostcms:reshenija:pasted:20171010-112520.png}} Значения этих свойств добавляется при помощи метода addMinMaxProperty: public function addMinMaxProperty($aProperties_id) { $iCurrentShopGroup = intval($this->group); //Получаем номер текущей группы $arItemsId = array(); $oShortcuts = Core_Entity::factory('shop_item'); //Находим все ярлыки $oShortcuts->queryBuilder() ->where('shop_items.shortcut_id', '!=', 0) ->where('shop_items.shop_group_id', '=', $iCurrentShopGroup); $aoShortcuts = $oShortcuts->findAll(); //Записываем в массив id всех ярлыков $aShortcutsId = array(); foreach ($aoShortcuts as $oShortcurt) { $aShortcutsId[] = $oShortcurt->shortcut_id; } $oShop_Items = Core_Entity::factory('shop_item'); //Если есть ярлыки if(count($aShortcutsId) > 0) { $oShop_Items->queryBuilder() ->where('shop_items.shop_group_id', '=', $iCurrentShopGroup) ->where('shop_items.shortcut_id', '=', 0) ->setOr() ->where('shop_items.id', 'IN', $aShortcutsId); } else { $oShop_Items->queryBuilder() ->where('shop_items.shop_group_id', '=', $iCurrentShopGroup); } $aoShop_Items = $oShop_Items->findAll(); foreach($aProperties_id as $property_id) { $aPropertyValues = ''; $oProperty = Core_Entity::factory('Property', $property_id); foreach($aoShop_Items as $oShop_Item) { $oPropertyValue = $oProperty->getValues($oShop_Item->id, FALSE); if(isset($oPropertyValue[0])) { $aPropertyValues[] = $oPropertyValue[0]->value; } } if(is_array($aPropertyValues)) { $minPropertyValue = min($aPropertyValues); $maxPropertyValue = max($aPropertyValues); $this->addEntity( Core::factory('Core_Xml_Entity') ->name('minPropertyValue') ->value($minPropertyValue) ->addAttribute('id', $property_id) ) ->addEntity( Core::factory('Core_Xml_Entity') ->name('maxPropertyValue') ->value($maxPropertyValue) ->addAttribute('id', $property_id) ); } } return $this; } Этот метод принимает массив идентификаторов свойств, которые необходимо узнать, а возвращает в XML тэги и ,где id это идентификатор свойства, который мы передаем в качестве аргумента. ==== Пример использования ==== Вызов в макете или ТДС: $Kad_Shop_Controller_Show ->group($iCurrentShopGroup) // Указываем группу ->->addMinMaxProperty(array(423,424)) В результате работы в XML появятся теги с минимальным и максимальным значением свойсв, id которых были переданы в массиве в качестве аргумента: 50 125 35 80 Страницу создал Егор Козырев 10.10.17 в 10:55