Ограничение по складу

Если Вам нужно ограничить показ каких либо товаров в регионе по привязанному к нему складу,
то в контроллере показа товаров можно добавить следующее ограничение:
1
// ограничение по мультирегионам MultiRegion
2
if(isset(Core_Page::instance()->multiregion) && $oMultiRegion = Core_Page::instance()->multiregion)
3
{
4
$aReturn = $oMultiRegion->getWarehouses();
5
6
if(count($aReturn))
7
{
8
// подключаем склады
9
$Shop_Controller_Show->warehouseMode('in-stock');
10
11
// ограничиваем по ID склада в регионе
12
$Shop_Controller_Show
13
->shopItems()
14
//->shopItemsInit() // для модуля "Умные фильтры"
15
->queryBuilder()
16
->where('shop_warehouse_items.shop_warehouse_id','IN',$aReturn);
17
}
18
}
Для модификаций - добавьте хук в bootstrap.php или в нужную ТДС
1
class My_Multiregion_Observer
2
{
3
static public function onBeforeSelectModifications($object, $args)
4
{
5
list($oShop_Items_Modifications) = $args;
6
7
if(isset(Core_Page::instance()->multiregion) && $oMultiRegion = Core_Page::instance()->multiregion)
8
// огранчиение только для карточки товара
9
//if(isset(Core_Page::instance()->item) && Core_Page::instance()->item && isset(Core_Page::instance()->multiregion) && $oMultiRegion = Core_Page::instance()->multiregion)
10
{
11
$aReturn = $oMultiRegion->getWarehouses();
12
13
if(count($aReturn))
14
{
15
// подключаем склады
16
$oShop_Items_Modifications
17
->queryBuilder()
18
->join('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
19
->join('shop_warehouses', 'shop_warehouses.id', '=', 'shop_warehouse_items.shop_warehouse_id')
20
->where('shop_warehouses.active', '=', 1)
21
->where('shop_warehouses.deleted', '=', 0)
22
->having('SUM(shop_warehouse_items.count)', '>', 0)
23
->groupBy('shop_items.id');
24
25
// ограничиваем по ID склада в регионе
26
$oShop_Items_Modifications
27
->queryBuilder()
28
->where('shop_warehouse_items.shop_warehouse_id','IN',$aReturn);
29
}
30
}
31
}
32
}
33
34
Core_Event::attach('shop_item.onBeforeSelectModifications', array('My_Multiregion_Observer', 'onBeforeSelectModifications'));