This is an old revision of the document!
Хотим скрыть товары, которых нет в наличии на текущем складе. Назначаем наблюдатель для события onBeforeRedeclaredShow
класса Shop_Controller_Show
:
bootstrap.php
добавляем код:// Идентификатор интернет-магазина define('REGION_PRICES_SHOP_ID', 4); // KAD: Скрываем товары, которых нет в наличии на текущем складе Core_Event::attach('Shop_Controller_Show.onBeforeRedeclaredShow', array('Kad_Shop_Item_Observers_Hidenotavailableitems', 'onBeforeRedeclaredShow'));
/modules/kad/shop/item/observers/
создаем файл hidenotavailableitems.php
со следующим содержимым:<?php /* * @author Maxim Zasorin, KAD Systems (©) 2015 * @date 18-11-2015 * * В bootstrap.php: * // KAD: Скрываем товары, которых нет в наличии на текущем складе Core_Event::attach('Shop_Controller_Show.onBeforeRedeclaredShow', array('Kad_Shop_Item_Observers_Hidenotavailableitems', 'onBeforeRedeclaredShow')); * Копирование и использование файлов модуля * в коммерческих целях ЗАПРЕЩЕНО * */ defined('HOSTCMS') || exit('HostCMS: access denied.'); class Kad_Shop_Item_Observers_Hidenotavailableitems { static public function onBeforeRedeclaredShow($object, $args) { if ( ( defined('REGION_PRICES_SHOP_ID') && REGION_PRICES_SHOP_ID == $object->getEntity()->id ) && !$object->item ) { $oShop = Core_Entity::factory('Shop', REGION_PRICES_SHOP_ID); $oCurrent_Warehouse = $oShop->Shop_Warehouses->getDefault(); $object->shopItems() ->queryBuilder() ->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id', array( array( 'AND' => array('shop_warehouse_items.shop_warehouse_id', '=', $oCurrent_Warehouse->id) ) ) ) ->where('shop_warehouse_items.count', '>', 0); } } }
Хотим скрыть модификации товаров, которых нет в наличии на текущем складе. Назначаем наблюдатель для события onBeforeShowXmlModifications
сущности shop_item
:
bootstrap.php
добавляем код:// KAD: Скрываем товары, которых нет в наличии на текущем складе Core_Event::attach('shop_item.onBeforeShowXmlModifications', array('Kad_Shop_Item_Observers_Hidenotavailablemods', 'onBeforeShowXmlModifications'));
/modules/kad/shop/item/observers/
создаем файл hidenotavailablemods.php
со следующим содержимым:<?php /* * @author Maxim Zasorin, KAD Systems (©) 2015 * @date 18-11-2015 * * В bootstrap.php: * // KAD: Скрываем модификации, которых нет в наличии на текущем складе Core_Event::attach('shop_item.onBeforeShowXmlModifications', array('Kad_Shop_Item_Observers_Hidenotavailablemods', 'onBeforeShowXmlModifications')); * Копирование и использование файлов модуля * в коммерческих целях ЗАПРЕЩЕНО * */ defined('HOSTCMS') || exit('HostCMS: access denied.'); class Kad_Shop_Item_Observers_Hidenotavailablemods { static public function onBeforeShowXmlModifications($object, $args) { if ( ( defined('REGION_PRICES_SHOP_ID') && REGION_PRICES_SHOP_ID == $object->shop_id ) ) { $oShop = Core_Entity::factory('Shop', REGION_PRICES_SHOP_ID); $oCurrent_Warehouse = $oShop->Shop_Warehouses->getDefault(); $args[0]->queryBuilder() ->select('shop_items.*') ->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id', array( array( 'AND' => array('shop_warehouse_items.shop_warehouse_id', '=', $oCurrent_Warehouse->id) ) ) ) ->where('shop_warehouse_items.count', '>', 0); } } }
Константа REGION_PRICES_SHOP_ID задает идентификатор интернет-магазина, для которого хотим скрыть товары и модификации товаров.
Если наблюдатель не срабатывает на странице интернет-магазина, то возможно в ТДС используется класс, наследованный от Shop_Controller_Show, например, с названием My_Shop_Controller_Show, или другой. Для такого класса нужно назначить наблюдатель отдельно. В bootstrap.php
добавляем код:
Core_Event::attach('My_Shop_Controller_Show.onBeforeRedeclaredShow', array('Kad_Shop_Item_Observers_Hidenotavailableitems', 'onBeforeRedeclaredShow'));