hostcms, итак, пробегусь еще раз.
Задача: при удалении всех меток (тегов) у товара в 1С при выполнении автоматического обмена удалять все метки товара и в БД HostCMS.
Для того, чтобы обозначить ситуацию, в которой у товара должны быть удалены все метки, в XML-код, который отдает 1С алгоритму обмена, были внесены изменения. Теперь в случае, когда нужно удалить все метки, этот код выглядит так.
<КоммерческаяИнформация>
<Каталог>
<Товары>
<Товар>
<ЗначенияСвойств>
<ЗначенияСвойства>
<Ид>HCMSM</Ид>
<Значение>DELETEALLTAGS</Значение>
</ЗначенияСвойства>
</ЗначенияСвойств>
</Товар>
</Товары>
</Каталог>
</КоммерческаяИнформация>
В каталоге
modules/shop/item/import/cml я создал файл
oberver.php. В нем я написал следующий код.
class Shop_Item_Import_Cml_Observer {
static public function onAfterOffersShopItem($object, $args)
{
$oShopItem = $args[0];
$oXmlItem = $args[1];
// Добавляем значения для общих свойств всех товаров
foreach ($object->xpath($oXmlItem, 'ЗначенияСвойств/ЗначенияСвойства') as $ItemPropertyValue)
{
$sPropertyGUID = strval($ItemPropertyValue->Ид);
$sValue = strval($oPropertyValue->Значение);
// Если это обработка меток товаров
if ( $sPropertyGUID === "HCMSM" )
{
if ( $sValue === "DELETEALLTAGS" )
{
$oShopItem->Tag_Shop_Items->deleteAll(FALSE);
}
}
}
return $this;
}
}
В файл
bootstrap.php в самый конец я добавил это:
// Удаление меток при импорте товаров из 1С
Core_Event::attach('Shop_Item_Import_Cml_Controller.onAfterImportShopItem', array('Shop_Item_Import_Cml_Observer', 'onAfterOffersShopItem'));
Всё ли верно?