private:koding:hostcms:modules:shop:elements:hidenotalloweditemsandmods

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'));
private/koding/hostcms/modules/shop/elements/hidenotalloweditemsandmods.1448033513.txt.gz · Last modified: 20.11.15 в 18:31 by maximzasorin_gmail.com