Здравствуйте!
На сколько я понял, в 6-й версии, после открытия модели каталога на запись, появилась возможность обрабатывать и события каталога. Соответствующий раздел документации это подтверждает.
Однако обработать событие сохранения элемента (товара) у меня так и не получается.
Как я понял из вышеуказанного раздела документации, подходящим для этой задачи событием является v5_on_item_prepare.
Попробовал добавить обработчик:
результат тот же - письма-уведомления я не получаю.
Подскажите, в чем причина? Что я делаю не верно и как можно обрабатывать событие "перед сохранением товара"?
Добавлено: Обработка событий каталога17.03.14 15:19:16
Спасибо! В таком варианте обработчик срабатывает. Антон, скажите, а что означает префикс "v5" в названии события?
У меня первая ассоциация была с 5-й версией системы, т.е. или что-то устаревшее, добавленное для обратной совместимости или что-то в этом духе...
Добавлено: Обработка событий каталога17.03.14 15:46:53
В таких событиях данные могут несколько отличаться от формата 6-ой версии. Например, в данном случае $aEvent['aData'] содержит массив полей вместо модели элемента.
Добавлено: Обработка событий каталога17.03.14 16:42:22
Антон: В таких событиях данные могут несколько отличаться от формата 6-ой версии.
мда... судя по всему, данные отличаются весьма существенно
$aEvent['aData'] и в событии 'on_before_save_model_item' содержит массив значений полей элемента.
А в этом событии кроме $aEvent['aData'] есть только $aEvent['modId'] и $aEvent['itemId'] и все?
При этом в $aEvent['aData'] нет даже свойств товара (custom_fields)?
Нет мета-данных?
Добавлено: Обработка событий каталога18.03.14 08:41:01
Здравствуйте! Антон, Вы не могли бы порекомендовать, каким образом решить задачу изменения данных (которых нет в массиве $aEvent['aData']) при создании нового товара или изменении существующего (при определенных условиях)?
Например, необходимо сгенерировать мета-данные по собственному алгоритму.
Однако, как я понимаю, если я сделаю это в функции обработки события 'v5_on_item_prepare' и сохраню их, то они будут просто перезаписаны при сохранении данных товара в БД.
События 'после_сохранения_элемента' я не нашел.
Подскажите, пожалуйста, как можно поступить? Какое событие использовать?
И второй вопрос - в документации есть событие 'v5_on_generate_eshop_item_keywords'
Но с ним я тоже не смог разобраться самостоятельно.
В какой момент оно возникает и/или как добавить обработчик для этого события?
Добавлено: Обработка событий каталога18.03.14 10:26:30
Evgeney S.: каким образом решить задачу изменения данных (которых нет в массиве $aEvent['aData']) при создании нового товара или изменении существующего (при определенных условиях)?
Часть данных можно задавать в обработчике этого события, но для генерации мета-данных используйте событие 'v5_on_generate_eshop_item_keywords'.
В обработчике можно задать свои значения для следующих переменных:
$aEvent['aData']['html_title'] // title
$aEvent['aData']['html_keywords'] // keywords
$aEvent['aData']['html_description'] // description
Добавлено: Обработка событий каталога18.03.14 10:56:58
но обработчик не сработал ни разу - я пробовал удалять мета-данные у товара и сохранять его, а так же генерировать мета-данные через групповые операции.
Поэтому вопрос остается - В какой момент оно возникает и как добавить обработчик для этого события?
Добавлено: Обработка событий каталога18.03.14 11:24:03
Спасибо, Дмитрий!
Вы не могли бы уточнить, когда возникает это событие? При каждом сохранении товара?
И возникает ли оно при генерации мета-данных товара через групповые операции?
Добавлено: Обработка событий каталога19.03.14 10:34:14
Evgeney S.: Вы не могли бы уточнить, когда возникает это событие? При каждом сохранении товара?
И возникает ли оно при генерации мета-данных товара через групповые операции?
Событие возникает при каждом сохранении товара с формы.
Если использовать групповые операции, то событие v5_on_generate_eshop_item_keywords сгенерировано не будет.
Добавлено: Обработка событий каталога19.03.14 11:00:03
Здравствуйте!
Новый вопрос в продолжении темы ))
При генерации мета-данных необходимо так же сохранить информацию об этом факте.
Был выбран вариант сохранения даты генерации в свойство товара (кастомное поле).
И вот на этом моменте и возникает проблема.
В обработчиках событий v5_on_generate_eshop_item_keywords и v5_on_item_prepare сделать это не удается ни изменением значения в массиве $aEvent['aData']:
$aEvent['aData']['custom_field_XXX'] = YYY;
ни непосредственной записью в базу (события происходят до сохранения данных о товаре в базу и при сохранении мои изменения просто перетираются).
Скажите, пожалуйста, как решить данную задачу (изменение кастомного поля вместе с генерацией мета-данных)?
Есть ли событие "после_сохранения_товара"?
И как можно узнать больше о механизме генерации и обработки событий - какие еще события генерируются при сохранении товара, какова последовательность их возникновения, какие данные можно изменять в каждом из них, как передавать данные от одного события другому (предполагаю, что через $aEvent)?
Добавлено: Обработка событий каталога20.03.14 10:54:52
1. Опытном путем установлено (сейчас еще раз проверил с использованием флага из примера), что событие 'v5_on_generate_eshop_item_keywords' возникает после события 'v5_on_item_prepare'.
Поэтому в обработчике события v5_on_item_prepare не доступен флаг, установленный при обработке события v5_on_generate_eshop_item_keywords (его еще просто не установили).
Наоборот - да, доступен.
2. В обработчике события 'v5_on_item_prepare' не удается изменить значения кастомных полей.
Т.е. конструкция вида
$aEvent['aData']['custom_field_XXX'] = YYY;
не дает никакого результата. Данные, которые есть в массиве $aEvent['aData'] - да, можно изменить. Но кастомных полей там нет...