Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
почему не срабатывает "if test" в файле object-view.xsl

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 2843
Последний ответ 14 Февраля 2014, 19:09:56
от Axiomateria
Не срабатывает скидка при опционных свойствах и нулевой цене

Автор atachРаздел Custom макросы

Ответов: 13
Просмотров: 5079
Последний ответ 28 Августа 2013, 16:21:16
от atach
Не срабатывает форма авторизации пользователя.

Автор SeweryssРаздел Настройка системы и модулей

Ответов: 5
Просмотров: 3863
Последний ответ 24 Октября 2013, 22:22:51
от admin
В IE7-IE9 не срабатывает action у формы

Автор AllaVKРаздел JS и AJAX

Ответов: 43
Просмотров: 28132
Последний ответ 26 Сентября 2012, 11:32:09
от admin

0 Пользователей и 1 Гость просматривают эту тему.

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
Не срабатывает кастомное собитие
« : 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 ... т.д.) пробовал все .... не выходит всеравно ...

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Не срабатывает кастомное собитие
« Ответ #1 : 03 Сентября 2013, 10:01:24 »
для начала, добавьте команду подтверждение на сохранение изменений данных пользователя иначе вы ничего не увидите при изменении

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

P.S. Если не заработает, попробуйте перенести event и обработчик в основную папку (то есть расположить код по старой схеме в папке /classes/modules/emarket/...)

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
Re:Не срабатывает кастомное собитие
« Ответ #2 : 03 Сентября 2013, 11:54:47 »
Добавил в код "$userObject->commit();" (хотя он и без этого сохраняет).

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

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Не срабатывает кастомное собитие
« Ответ #3 : 03 Сентября 2013, 14:51:18 »
а каким образом вы меняете статус? в админке? оформление на сайте?

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
Re:Не срабатывает кастомное собитие
« Ответ #4 : 03 Сентября 2013, 20:28:39 »
Да я меняю в админке ...
Из техподдержки подсказали что нужно использовать точку: "systemModifyObject".
Но статус менять нужно не просто в списке заказов (как я делал), а объязательно при заходе в заказ и и сохранении его. Точка вызова именно там.

Теперь ищу как запретить или остановить цепочку выполнения событий, если они пересекаются или дублируются, помню читал в документации такое... но не нахожу сейчас.
« Последнее редактирование: 03 Сентября 2013, 20:40:20 от atach »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Не срабатывает кастомное собитие
« Ответ #5 : 03 Сентября 2013, 21:54:14 »
возможно вы вспоминате упоминание такого метода
throw new breakException()
в описание нового формата расширения функционала

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Не срабатывает кастомное собитие
« Ответ #6 : 05 Сентября 2013, 13:45:48 »
Добавил в код "$userObject->commit();" (хотя он и без этого сохраняет).

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

А где был код? В файле __custom.php или __custom_adm.php? Так как событие происходит в админке, то и код должен быть в custom_adm.php
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Не срабатывает кастомное собитие
« Ответ #7 : 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();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
Re:Не срабатывает кастомное собитие
« Ответ #8 : 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) не срабатывает из папки шаблона, только из системного пути модуля

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Не срабатывает кастомное собитие
« Ответ #9 : 05 Сентября 2013, 15:32:04 »
бывает такое