---

--  ->   Разработка плагинов, вопросы по API  ->  Обработка событий каталога


Раздел для разработчиков. Обсуждение создания плагинов, вопросы и пожелания по API Amiro.CMS

«      1      2


Добавлено: 24.03.14 09:38:11 #16



Регистрация: 22.02.09
Сообщений: 335


Обратиться по имени

Здравствуйте!
Скажите, пожалуйста, существует ли все же решение для описанной задачи?
И относительно двух пунктов, описанных в предыдущем сообщении - является ли это ошибкой или я что-то делаю не верно?
Добавлено: 24.03.14 14:01:31 #17



Регистрация: 22.10.12
Сообщений: 35


Обратиться по имени

Evgeney S.:
1. Опытном путем установлено (сейчас еще раз проверил с использованием флага из примера), что событие 'v5_on_generate_eshop_item_keywords' возникает после события 'v5_on_item_prepare'.
Поэтому в обработчике события v5_on_item_prepare не доступен флаг, установленный при обработке события v5_on_generate_eshop_item_keywords (его еще просто не установили).
Наоборот - да, доступен.


Событие v5_on_generate_eshop_item_keywords на данный момент действительно генерируется позже v5_on_item_prepare.

Evgeney S.:

2. В обработчике события 'v5_on_item_prepare' не удается изменить значения кастомных полей.
Т.е. конструкция вида
$aEvent['aData']['custom_field_XXX'] = YYY;
не дает никакого результата. Данные, которые есть в массиве $aEvent['aData'] - да, можно изменить. Но кастомных полей там нет...


Как вариант решения, можно подменять полученные с формы данные внутри обработчика события v5_on_item_prepare, например -

AMI_Event::addHandler('v5_on_item_prepare', 'cstItemPrepareHandler', AMI_Event::MOD_ANY);
function cstItemPrepareHandler($name, array $aEvent, $handlerModId, $srcModId){
    if($aEvent['modId'] == 'eshop_item') {
        $oRequest = AMI::getSingleton('env/request');
        $oRequest->
            set('html_description', $oRequest->get('description', 'p'), 'p')->
            set('custom_field_36', date('d-m-Y H:i:s'), 'p');
        }
    return $aEvent;
}
Добавлено: 26.03.14 10:25:30 #18



Регистрация: 21.03.07
Сообщений: 225


Обратиться по имени

Evgeney S.:
2. В обработчике события 'v5_on_item_prepare' не удается изменить значения кастомных полей.
Т.е. конструкция вида $aEvent['aData']['custom_field_XXX'] = YYY; не дает никакого результата. Данные, которые есть в массиве $aEvent['aData'] - да, можно изменить. Но кастомных полей там нет...

В следующей версии системы мы добавим наличие дополнительных полей и возможность их изменения из обработчика события 'v5_on_item_prepare'.
Добавлено: 28.03.14 11:16:51 #19



Регистрация: 22.02.09
Сообщений: 335


Обратиться по имени

В итоге задача была решена через подмену данных, полученных с формы внутри обработчика события v5_on_item_prepare, как предложил Dmitry Kornilov.
Спасибо!
Однако не могу сказать, что это именно то, чего я ожидал от реализации обработки события сохранения товара
Антон:
В следующей версии системы мы добавим наличие дополнительных полей и возможность их изменения из обработчика события 'v5_on_item_prepare'.
Отлично!
Однако, даже будь такая возможность сейчас, это бы не решило проблемы.
Т.к. в этом событии так же нет возможности модифицировать мета-данные, а событие v5_on_generate_eshop_item_keywords происходит уже позже.
Поэтому, на мой взгляд, для полноценной работы нужно событие, которое происходит непосредственно перед сохранением данных в БД и в котором можно изменять все те данные, которые сохраняются.
Так же хотелось бы видеть событие, которое происходит непосредственно после сохранения данных элемента в БД (здесь из доступных данных нужны только id модуля и id элемента).
Еще раз спасибо за помощь в решении задачи!
Добавлено: 28.03.14 11:32:43 #20



Регистрация: 21.03.07
Сообщений: 225


Обратиться по имени

Evgeney S.:
событие v5_on_generate_eshop_item_keywords происходит уже позже.

Порядок событий тоже изменится, 'v5_on_generate_eshop_item_keywords' будет вызываться перед 'v5_on_item_prepare'.
Добавлено: 28.03.14 11:44:39 #21



Регистрация: 22.02.09
Сообщений: 335


Обратиться по имени

Антон:
Порядок событий тоже изменится, 'v5_on_generate_eshop_item_keywords' будет вызываться перед 'v5_on_item_prepare'.

Отлично!

«      1      2

Создать статью Ответить
ВебСтолица.РУ: создай свой бесплатный сайт!  | Пожаловаться  
Движок: Amiro CMS