This is an old revision of the document!
Хотим выводить разные цены для разных складов. Делаем следующее:
Shop_Item_Controller
, в котором определеяется цена товара. Наблюдатель будет заменять цену товара в зависимости от выбранного основного склада. Для этого в файле bootstrap.php
добавляем код:<?php // ID интернет-магазина define('REGION_PRICES_SHOP_ID', 4); // KAD: Подменяем цену товара в зависимости от текущего склада Core_Event::attach('Shop_Item_Controller.onBeforeCalculatePrice', array('Kad_Shop_Item_Observers_Regionprices', 'onBeforeCalculatePrice')); Core_Event::attach('Shop_Item_Controller.onBeforeCalculatePriceInItemCurrency', array('Kad_Shop_Item_Observers_Regionprices', 'onBeforeCalculatePrice'));
Константа REGION_PRICES_SHOP_ID
задает ID интернет-магазина, для которого производится подмена.
/modules/kad/shop/item/observers/
создаем файл regionprices.php
с таким содержимым:<?php /* * @author Maxim Zasorin, KAD Systems (©) 2015 * @date 18-11-2015 * * В bootstrap.php: * // KAD: Подменяем цену товара в зависимости от текущего склада Core_Event::attach('Shop_Item_Controller.onBeforeCalculatePrice', array('Kad_Shop_Item_Observers_Regionprices', 'onBeforeCalculatePrice')); Core_Event::attach('Shop_Item_Controller.onBeforeCalculatePriceInItemCurrency', array('Kad_Shop_Item_Observers_Regionprices', 'onBeforeCalculatePrice')); * Копирование и использование файлов модуля * в коммерческих целях ЗАПРЕЩЕНО * */ defined('HOSTCMS') || exit('HostCMS: access denied.'); class Kad_Shop_Item_Observers_Regionprices { static public function onBeforeCalculatePrice($object, $args) { if ( defined('REGION_PRICES_SHOP_ID') && REGION_PRICES_SHOP_ID == $args[0]->shop_id ) { // Товар $oShopItem = $args[0]; // Текущий склад $oShop = Core_Entity::factory('Shop', REGION_PRICES_SHOP_ID); $oCurrentWarehouse = $oShop->Shop_Warehouses->getDefault(); // Цена для текущего склада $oShopPrice = Core_Entity::factory('shop_price'); $oShopPrice ->queryBuilder() ->where('name', '=', $oCurrentWarehouse->name); // print $oCurrentWarehouse->name; $aoShopPrices = $oShopPrice->findAll(); if (count($aoShopPrices) > 0) { $oPriceForWarehouse = $aoShopPrices[0]; // Цена товара для текущего склада $oShopItemPrices = $oShopItem->Shop_Item_Prices; $oShopItemPrices->queryBuilder() ->where('shop_price_id', '=', $oPriceForWarehouse->id); $aoShopItemPrice = $oShopItemPrices->findAll(); // Если цена для товара не установлена, то возможно это модификация, // поэтому просматриваем цены для родительского товара // if (count($aoShopItemPrice) == 0 && $oShopItem->modification_id != 0) // { // $oParentShopItem = Core_Entity::factory('shop_item', $oShopItem->modification_id); // $oShopItemPrices = $oParentShopItem->Shop_Item_Prices; // $oShopItemPrices->queryBuilder() // ->where('shop_price_id', '=', $oPriceForWarehouse->id); // $aoShopItemPrice = $oShopItemPrices->findAll(); // } // Цена для склада все-таки есть if (count($aoShopItemPrice) > 0) { $oShopItemPrice = $aoShopItemPrice[0]; $price = $oShopItemPrice->value; // Устанавливаем цену склада $object->setAPrice( array( 'tax' => 0, 'rate' => 0, 'price' => $price, 'price_discount' => $price, 'price_tax' => $price, 'discount' => 0, 'discounts' => array() ) ); } } } } }