Контроллер показа Shop_Controller_Show имеет опцию warehouseMode(), которая может принимать следующие значения:
Указать опцию можно в коде типовой динамической страницы интернет-магазина перед show(), например:
$Shop_Controller_Show ->xsl( Core_Entity::factory('Xsl')->getByName($xslName) ) // Выводить свойства товаров ->itemsProperties(TRUE) ... // Учет остатка товаров на складе ->warehouseMode('in-stock') ->show();
* опция warehouseMode() доступна с версии 6.7.5.
Ограничения на вывод товаров задаются через метод shopItems()
контроллера Shop_Controller_Show
, метод возвращает объект Shop_Item_Model
с настроенными ограничениями. Дополним их через queryBuilder():
$Shop_Controller_Show->shopItems() ->queryBuilder() ->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id') ->having('SUM(shop_warehouse_items.count)', '>', 0) ->groupBy('shop_items.id');
$Shop_Controller_Show->show();
Вывод товаров, имеющих остатки на складах, либо товаров, имеющих модификации с остатками на складе.
$Shop_Controller_Show->shopItems()
->queryBuilder()
// Модификации и остатки на складах модификаций
->leftJoin(array('shop_items', 'modifications'), 'modifications.modification_id', '=', 'shop_items.id')
->leftJoin(array('shop_warehouse_items', 'modifications_shop_warehouse_items'), 'modifications_shop_warehouse_items.shop_item_id', '=', 'modifications.id')
// Остатки на складах основного отвара
->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
// Есть остатки на основном складе
->havingOpen()
->having('SUM(shop_warehouse_items.count)', '>', 0)
// Или
->setOr()
// Есть остатки на складах у модификаций
->having('SUM(modifications_shop_warehouse_items.count)', '>', 0)
->havingClose()
->groupBy('shop_items.id');
$Shop_Controller_Show->show();