В интернет-магазине стандартный контроллер показа заменяет в 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