====== Добавление минимальных и максимальных значений свойств товаров и ярлыков ======
==== Описание ====
У нас уже имеется решение которое корректирует работу фильтров для ярлыков. Однако фильтры бывают не всегда стандартными и для их корректной работы необходимы минимальное и максимальное значение какого-либо свойства. В стандартном контроллере уже есть метод 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