Ограничение по складу
Last updated
Last updated
Если Вам нужно ограничить показ каких либо товаров в регионе по привязанному к нему складу,
то в контроллере показа товаров можно добавить следующее ограничение:
// ограничение по мультирегионам MultiRegion
if(isset(Core_Page::instance()->multiregion) && $oMultiRegion = Core_Page::instance()->multiregion)
{
$aReturn = $oMultiRegion->getWarehouses();
if(count($aReturn))
{
// подключаем склады
$Shop_Controller_Show->warehouseMode('in-stock');
// ограничиваем по ID склада в регионе
$Shop_Controller_Show
->shopItems()
//->shopItemsInit() // для модуля "Умные фильтры"
->queryBuilder()
->where('shop_warehouse_items.shop_warehouse_id','IN',$aReturn);
}
}
Для модификаций - добавьте хук в bootstrap.php
или в нужную ТДС
class My_Multiregion_Observer
{
static public function onBeforeSelectModifications($object, $args)
{
list($oShop_Items_Modifications) = $args;
if(isset(Core_Page::instance()->multiregion) && $oMultiRegion = Core_Page::instance()->multiregion)
// огранчиение только для карточки товара
//if(isset(Core_Page::instance()->item) && Core_Page::instance()->item && isset(Core_Page::instance()->multiregion) && $oMultiRegion = Core_Page::instance()->multiregion)
{
$aReturn = $oMultiRegion->getWarehouses();
if(count($aReturn))
{
// подключаем склады
$oShop_Items_Modifications
->queryBuilder()
->join('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
->join('shop_warehouses', 'shop_warehouses.id', '=', 'shop_warehouse_items.shop_warehouse_id')
->where('shop_warehouses.active', '=', 1)
->where('shop_warehouses.deleted', '=', 0)
->having('SUM(shop_warehouse_items.count)', '>', 0)
->groupBy('shop_items.id');
// ограничиваем по ID склада в регионе
$oShop_Items_Modifications
->queryBuilder()
->where('shop_warehouse_items.shop_warehouse_id','IN',$aReturn);
}
}
}
}
Core_Event::attach('shop_item.onBeforeSelectModifications', array('My_Multiregion_Observer', 'onBeforeSelectModifications'));