UMIhelp

Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: arbuzzz от 18 Августа 2016, 23:39:10

Название: Письмо при появлении товара
Отправлено: arbuzzz от 18 Августа 2016, 23:39:10
Никак не соображу, как мне сделать, что бы при изменении остатков из "Мой Склад" с 0 на >0 отправлялось оповещение подписанным клиентам.
Какое событие использовать?
Как я понимаю, по идее это exchangeOnUpdateElement, но как мне нужно использовать before или after?
И что такое (DOMElement) element_info - содержит информацию о добавляемом элементе(странице)(из документации) что в нем содержится и в каком виде.
Название: Re: Письмо при появлении товара
Отправлено: aghigay от 19 Августа 2016, 12:00:26
before - это точка до обновления элемента
after - это точка после обновления элемента

В точке before вы в элемент в какое-то промежуточное поле можете писать старое количество.
В точке after вы можете сверять содержимое этого поля с новым количеством.
Название: Re: Письмо при появлении товара
Отправлено: arbuzzz от 19 Августа 2016, 17:29:14
before - это точка до обновления элемента
after - это точка после обновления элемента

В точке before вы в элемент в какое-то промежуточное поле можете писать старое количество.
В точке after вы можете сверять содержимое этого поля с новым количеством.
Чем отличаются before и after я понимаю, спасибо. Я имел в виду, какое из них по правильному использовать. Я просто не понимаю какие параметры туда приходят (именно при обмене). Но вариант с промежуточным полем в самой карточке, в принципе, это вариант. Я правда не большой любитель лишние поля городить. Я пока заколхозил таблицу куда делаю записи до и после. Тоже корявенько, хотя бы не видно =))
Название: Re: Письмо при появлении товара
Отправлено: aghigay от 19 Августа 2016, 17:40:00
Пройдитесь поиском по системному коду, найдите событие и посмотрите какие данные передаются вовнутрь и в какой момент - это самый простой и самый правильный метод определения.

Мало того, это фактически единственный правильный способ, так как у вас может быть ЮМИ какой-то версии, в которой системный код может выглядеть как угодно. В частности, там могут быть какие-то баги, которые исправлены в более поздних версиях (например, не все задокументированные параметры передаются), а в вашей версии они еще не исправлены.
Название: Re: Письмо при появлении товара
Отправлено: arbuzzz от 19 Августа 2016, 17:47:20
Пройдитесь поиском по системному коду, найдите событие и посмотрите какие данные передаются вовнутрь и в какой момент - это самый простой и самый правильный метод определения.

Мало того, это фактически единственный правильный способ, так как у вас может быть ЮМИ какой-то версии, в которой системный код может выглядеть как угодно. В частности, там могут быть какие-то баги, которые исправлены в более поздних версиях (например, не все задокументированные параметры передаются), а в вашей версии они еще не исправлены.
Ну видимо так и придется, спасибо. Жаль у них нет отметок о версионности в документации. У меня например целевая версия 2.8.6, а в документации уже явно часть методов, которые в данной версии не реализованы.
Название: Re: Письмо при появлении товара
Отправлено: aghigay от 19 Августа 2016, 17:50:43
надо обновляться
с 2.9.??? появился механизм достойной чистки базы
с 2.11 существенно повышено быстродействие
с 14 - поддержка php7 , которая тупо в 2-3 раза повышает скорость работы при тех же характеристиках сервера и настройках сайта
+ пофикшены все баги
Название: Re: Письмо при появлении товара
Отправлено: arbuzzz от 19 Августа 2016, 17:57:03
надо обновляться
с 2.9.??? появился механизм достойной чистки базы
с 2.11 существенно повышено быстродействие
с 14 - поддержка php7 , которая тупо в 2-3 раза повышает скорость работы при тех же характеристиках сервера и настройках сайта
+ пофикшены все баги
Механизм чистки базы у меня "на руках" появился немного раньше. У меня был прототип, который они впоследствии, как я понял, использовали в релизе. Я в какой-то момент момент делал обновление достаточно крупного магазина и плотно работал со службой заботы.
Срок поддержки уже закончился, а я не уверен, что в исходниках нет изменений. Я просто не первый, кто поддержкой сайта занимается. Хотя конечно хотелось бы.
Название: Re: Письмо при появлении товара
Отправлено: aghigay от 19 Августа 2016, 17:59:54
Ну, тут только прыгать и править. Ну или оставаться жить на старой версии и не пользоваться благами цивилизации. Лично я предпочитаю прыгать. Уж больно удобные штуки в штатной ЮМИ появились в последнее время
Название: Re: Письмо при появлении товара
Отправлено: e.ioffe от 19 Августа 2016, 18:07:47
> Я пока заколхозил таблицу куда делаю записи до и после. Тоже корявенько, хотя бы не видно =))

Если я правильно помню, то для страниц для получения нового значения нужно использовать не $element->getValue(), а $element->getObject()->getValue();

Как вариант - хранить в статической переменной данные о количестве до обновления и сравнить с количеством после.
Название: Re: Письмо при появлении товара
Отправлено: aghigay от 19 Августа 2016, 18:12:45
Главное - тут хранить не только количество, но и id элемента, так как старое количество может тупо быть от другого объекта, нежели новое :-)
Название: Re: Письмо при появлении товара
Отправлено: e.ioffe от 21 Августа 2016, 11:29:49
Цитировать
Главное - тут хранить не только количество, но и id элемента, так как старое количество может тупо быть от другого объекта, нежели новое :-)

Пока не представляю ситуации, когда такое возможно.

if($eventPoint->getMode() == 'before') {
self::$amount = $element->getValue('amount');
} elseif($eventPoint->getMode() == 'after') {
if($element->getObject()->getValue('amount') != self::$amount) {
}
}

Событие вызывается на одном элементе, в before - значение до, в after - значение после сохранения.
Название: Re: Письмо при появлении товара
Отправлено: aghigay от 22 Августа 2016, 12:02:47
Если речь о статической переменной - то там все возможно :-)