UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: atach от 01 Сентября 2013, 10:53:39

Название: Не срабатывает кастомное собитие
Отправлено: atach от 01 Сентября 2013, 10:53:39
Почему то не срабатывает кастомное событие, или возможно я не правильно определяю точку.

Задача что бы при смене статуса заказа оповещение пользователю приходило только при определенных кодах статуса. Для этого делаю events, на которую вешаю кастомную функцию.

Я сделал следующее:
1. в файле /templates/mytepl/classes/modules/emarket/events.php прописал своё событие на смену статуса
<?php
new umiEventListener("order_refresh", "emarket", "OnActualPrice");
new umiEventListener("order-status-changed ", "emarket", "testingEvents");
?>

2. В той же папке в файле class.php добавил саму функцию testingEvents (для примера просто изменяю имя пользователя, что бы проверить срабатывает ли событие вообще)
public function testingEvents() {
$permissions = permissionsCollection::getInstance();
$currentUserId = "59";
$objects = umiObjectsCollection::getInstance();
$userObject = $objects->getObject($currentUserId);

if($userObject instanceof umiObject) {
$userObject->setValue("fname", "Проверка");
 }                        
        }
Но ничего не срабатывает почему то ... Точка вроде бы верно определена, не знаю может нужно testingEvents в permissions.php, если да, то в какую секцию их там 5 штук (purchasing, control, order_editing ... т.д.) пробовал все .... не выходит всеравно ...
Название: Re:Не срабатывает кастомное собитие
Отправлено: admin от 03 Сентября 2013, 10:01:24
для начала, добавьте команду подтверждение на сохранение изменений данных пользователя иначе вы ничего не увидите при изменении

if($userObject instanceof umiObject) {
    $userObject->setValue("fname", "Проверка");
    $userObject->commit();
}  

P.S. Если не заработает, попробуйте перенести event и обработчик в основную папку (то есть расположить код по старой схеме в папке /classes/modules/emarket/...)
Название: Re:Не срабатывает кастомное собитие
Отправлено: atach от 03 Сентября 2013, 11:54:47
Добавил в код "$userObject->commit();" (хотя он и без этого сохраняет).

Но вот ни это, ни перенос  в стандартные папки модулей (без шаблонного расположения) не помогло ...
Название: Re:Не срабатывает кастомное собитие
Отправлено: admin от 03 Сентября 2013, 14:51:18
а каким образом вы меняете статус? в админке? оформление на сайте?
Название: Re:Не срабатывает кастомное собитие
Отправлено: atach от 03 Сентября 2013, 20:28:39
Да я меняю в админке ...
Из техподдержки подсказали что нужно использовать точку: "systemModifyObject".
Но статус менять нужно не просто в списке заказов (как я делал), а объязательно при заходе в заказ и и сохранении его. Точка вызова именно там.

Теперь ищу как запретить или остановить цепочку выполнения событий, если они пересекаются или дублируются, помню читал в документации такое... но не нахожу сейчас.
Название: Re:Не срабатывает кастомное собитие
Отправлено: admin от 03 Сентября 2013, 21:54:14
возможно вы вспоминате упоминание такого метода
throw new breakException()
в описание нового формата расширения функционала (http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/razrabotka_sobstvennyh_makrosov_i_modulej/novyj_format_rasshireniya_funkcionala/#events)
Название: Re:Не срабатывает кастомное собитие
Отправлено: e.ioffe от 05 Сентября 2013, 13:45:48
Добавил в код "$userObject->commit();" (хотя он и без этого сохраняет).

Но вот ни это, ни перенос  в стандартные папки модулей (без шаблонного расположения) не помогло ...

А где был код? В файле __custom.php или __custom_adm.php? Так как событие происходит в админке, то и код должен быть в custom_adm.php
Название: Re:Не срабатывает кастомное собитие
Отправлено: admin от 05 Сентября 2013, 14:02:34
Да я меняю в админке ...
Из техподдержки подсказали что нужно использовать точку: "systemModifyObject".
Но статус менять нужно не просто в списке заказов (как я делал), а объязательно при заходе в заказ и и сохранении его. Точка вызова именно там.

действительно есть разные события на изменения при редактировании в таблице с заказами, а есть event для изменения при редактировании на отдельной странице.

вырезка из собственной заметки про событие через таблицу
Цитировать
event при edit-in-place изменении параметров в таблице объектов в админке

то есть мы в аминке видим таблицу товаров (модуль каталог) и в этой же таблице отредактировали какаое-то значение (например цена)

при этом система сделала обращение через ajax к методам /admin/content/save_editable_region и /admin/content/get_editable_region (файл /classes/modules/content/__json.php)

в частности меня интересовала функция сохранения save_editable_region у которой в конце сохранения есть обращение к event
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$event = new umiEventPoint("systemModifyPropertyValue");
                    $event->addRef("entity", $oEntity);
                    $event->setParam("property", $sPropName);
                    $event->setParam("oldValue", $oldValue);
                    $event->setParam("newValue", $content);
                    $event->setMode("after");
                    $event->call();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...
Название: Re:Не срабатывает кастомное собитие
Отправлено: atach от 05 Сентября 2013, 15:18:56
Да я меняю в админке ...
Из техподдержки подсказали что нужно использовать точку: "systemModifyObject".
Но статус менять нужно не просто в списке заказов (как я делал), а объязательно при заходе в заказ и и сохранении его. Точка вызова именно там.

действительно есть разные события на изменения при редактировании в таблице с заказами, а есть event для изменения при редактировании на отдельной странице.

вырезка из собственной заметки про событие через таблицу
Цитировать
event при edit-in-place изменении параметров в таблице объектов в админке

то есть мы в аминке видим таблицу товаров (модуль каталог) и в этой же таблице отредактировали какаое-то значение (например цена)

при этом система сделала обращение через ajax к методам /admin/content/save_editable_region и /admin/content/get_editable_region (файл /classes/modules/content/__json.php)

в частности меня интересовала функция сохранения save_editable_region у которой в конце сохранения есть обращение к event
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$event = new umiEventPoint("systemModifyPropertyValue");
                    $event->addRef("entity", $oEntity);
                    $event->setParam("property", $sPropName);
                    $event->setParam("oldValue", $oldValue);
                    $event->setParam("newValue", $content);
                    $event->setMode("after");
                    $event->call();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...

Код был в папке шаблона, сейчас там же и есть и работает... но вот само событие (events) не срабатывает из папки шаблона, только из системного пути модуля
Название: Re:Не срабатывает кастомное собитие
Отправлено: admin от 05 Сентября 2013, 15:32:04
бывает такое