Автоматизация загрузки информации о товарах

#
Re: Автоматизация загрузки информации о товарах
llirik, Благодарю. Изучу вопрос.

Ещё одно. Я несколько преобразил работу с метками товаров. Сейчас, если в 1С у товара ранее были метки, но потом они были полностью удалены, при обмене в БД с метками для товара ничего не происходит. Они остаются какими и были.

Я это слегка изменил, внёс изменения в код Shop_Item_Model. Конкретно - добавил кое что в метод applyTags().

Это тоже неверный путь?
#
Re: Автоматизация загрузки информации о товарах
да, модели нельзя редактировать. Так же изменения нужно вносить через хуки или используя хуки добавлять свои методы.
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Автоматизация загрузки информации о товарах
llirik, Уяснил. Благодарю.
#
Re: Автоматизация загрузки информации о товарах
llirik, правильно ли я понял...
Если мне, как я описывал выше, необходимо изменить стандартный метод applyTags() класса Shop_Item_Model, я должен сделать следующее.

1. Создать в каталоге /modules/shop/item файл observer.php, и в нем создать класс Shop_Item_Observer.
2. В классе Shop_Item_Observer создать статический метод onBeforeApplyTags().
3. В файле bootstrap.php добавить наблюдателя.

То есть...
class Shop_Item_Observer
{
   static public function onBeforeApplyTags($object, $args)
   {
      // Некие действия, которые будут предшествовать вызову метода applyTags() класса Shop_Item_Model
   }
}


И в файл bootstrap.php...
Core_Event::attach('shop_item.onBeforeApplyTags', array('Shop_Item_Observer', 'onBeforeApplyTags'));


Так?

P. S. hostcms, вероятно в документации опечатка. В пункте 2 написано: «Добавляем наблюдается». Наблюдателя же, видимо?
#
Re: Автоматизация загрузки информации о товарах
В модели shop_item нет хука onBeforeApplyTags. У вас какая задача?
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Автоматизация загрузки информации о товарах
llirik, между 1С и сайтом происходит автоматический обмен. Информация о товарах редактируется в 1С, затем через обмен автоматически отправляется на сайт. Метки товаров также редактируются в 1С.

Если в 1С товару присвоить метку, после обмена она успешно присваивается в интернет-магазине сайта. Если затем эту метку убрать, то алгоритм обмена ничего вообще с метками не делает, так как в XML с данными о товарах теги, в которые помещены метки, пустые. А метод applyTags() модели Shop_Item выглядит так:

public function applyTags($sTags)
   {
      $aTags = explode(',', $sTags);

      return $this->applyTagsArray($aTags);
   }


То есть, если строка в $sTags пустая, ничего не происходит с метками.
Алгоритм обмена в 1С был изменен так, чтобы в случае отсутствия меток у товаров в XML-теге <ЗначенияСвойства> у дочернего тега <Значение> была строка с определенным набором символов.

Я сначала добавил в код модели Shop_Item вот что. Точнее, изменил код её метода applyTags()
public function applyTags($sTags)
   {
      
      if ( $sTags === "NOTAGS" )
      {
         
         $this->Tag_Shop_Items->deleteAll(FALSE);
         
         return $this;
         
      }
      
      $aTags = explode(',', $sTags);

      return $this->applyTagsArray($aTags);
   }


Но как вы уже сказали ранее, это неправильный путь.
Модератор
#
Re: Автоматизация загрузки информации о товарах
lezhenkin,
если вам нужно менять логику импорта, то необходимо смотреть в контроллер импорта, а не править модели товаров. Это первое, второе - посмотрите в контроллер импорта из CML, в нем есть множество хуков, в том числе после импорта каждого товара, в хуке вы можете обрабатывать собственные поля из XML и выполнять свою логику.
#
Re: Автоматизация загрузки информации о товарах
hostcms, правильно ли я вас понял. Если мне нужно изменить логику обработки меток товаров при выгрузке их из 1С, мне нужно работать с хуком
Core_Event::notify('Shop_Item_Import_Cml_Controller.onAfterOffersShopItem', $this, array($oShopItem, $oProposal))

Если же я хочу изменить/добавить логику обработки специальных цен при выгрузке из 1С, я иду к хуку
Core_Event::notify(get_class($this) . '.onBeforeImportShopItemPrice', $this, array($oShopItem, $packageOfProposals, $oProposal, $oPrice))


М?
Модератор
#
Re: Автоматизация загрузки информации о товарах
lezhenkin,
да, при чем Shop_Item_Import_Cml_Controller.onBeforeImportShopItemPrice должен вернуть что-либо, кроме NULL, чтобы стандартная обработка не отрабатывала.
#
Re: Автоматизация загрузки информации о товарах
hostcms, благодарю. Поработаю пока с этой информацией. Потом задам еще вопросы, если они появятся.
Авторизация