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

Если Вам нужно ограничить показ каких либо товаров в регионе по привязанному к нему складу,

то в контроллере показа товаров можно добавить следующее ограничение:

// ограничение по мультирегионам 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'));

Last updated