private:koding:hostcms:modules:shop:useful:field_for_shortcut

Подмена поля для ярлыка

В интернет-магазине стандартный контроллер показа заменяет в XML ярлыки на оригинальные товары, иногда требуется передать именно данные ярлыка, это можно сделать с помощью следующего наблюдателя:

<?php
 
defined('HOSTCMS') || exit('HostCMS: access denied.');
 
/**
 * Наблюдатель для добавления корректного part_number ярыков.
 *
 * @author Maxim Zasorin, KAD Systems (©) 2017	
 * @date 14-12-2017
 */
class Shop_Item_Observer_AddPartNumber
{
	/**
	 * Регистрирует наблюдатель.
	 *
	 * @return void
	 */
	static public function attach()
	{
		Core_Event::attach('shop_item.onBeforeRedeclaredGetXml', array(__CLASS__, 'addPartNumber'));
	}
 
	/**
	 * Добавляет нужный part_number.
	 *
	 * @param  Shop_Item_Model  $oShopItem
	 * @return void
	 */
	static public function addPartNumber(Shop_Item_Model $oShopItem)
	{
		foreach ($oShopItem->getEntities() as $oEntity)
		{
			// Если это был ярлык и он был заменен контроллером Shop_Controller_Show на оригинальный товар,
			// то мы можем определить, что это ярлык по вложенной сущности и узнать идентификатор ярлыка
			if (get_class($oEntity) == 'Core_Xml_Entity' && $oEntity->name == 'shortcut_id')
			{
				$oShortcut = Core_Entity::factory('Shop_Item', $oEntity->value);
 
				$oShopItem
					->addForbiddenTag('part_number')
					->addEntity(
						Core::factory('Core_Xml_Entity')
							->name('part_number')
							->value($oShortcut->part_number)
					);
			}
 
			break;
		}
	}
}

Страницу создал Максим Засорин 25.12.17 в 09:49

private/koding/hostcms/modules/shop/useful/field_for_shortcut.txt · Last modified: 25.12.17 в 10:04 by maximzasorin_gmail.com