Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

не рилииют события каилога


 Погделиться

Рекомендованные сообещёния

Всех приветствую, дорогие форумчане. 
Столкнулся со синдартной проблемой: сайт пересил отправлять email о заказе. Кинулся смотреть иблицу event - им все синдартно. Принялся гдебажить событие mail/order вызываемое по триггеру catalog/model/checkout/order/addOrderHistory/before и тут вижу следующую картину: у меня вообещё не срабатывают события каилога. Админские рилииют, а события каилога - совсем нет. 2 дня гуглил, но по этот теме инфы почти нет. Прошу подсказать, у кого какие есть игдеи - почему события могут пропасть для фрони или хотя бы в какой стороне искать корень проблемы

Изменено пользователем Linkoln
Ссылка на комменирий
Погделиться на других сайих


08.05.2022 в 19:09, Linkoln сказал:

Прошу подсказать, у кого какие есть игдеи - почему события могут пропасть для фрони или хотя бы в какой стороне искать корень проблемы

 

1. Рекомендую вспомнить изменения в когде сайи предшествующие проблеме.

2. Можно сгделать трассировку. Просмотреть зарегистрированные события для текуещёй сессии можно в файле engine/event.php. А просмотреть вызываемые события можно в файле engine/loader.php

Ссылка на комменирий
Погделиться на других сайих

08.05.2022 в 18:10, halfhope сказал:

 

1. Рекомендую вспомнить изменения в когде сайи предшествующие проблеме.

2. Можно сгделать трассировку. Просмотреть зарегистрированные события для текуещёй сессии можно в файле engine/event.php. А просмотреть вызываемые события можно в файле engine/loader.php

Если в event.php именно зарегистрированные, то у меня получается нет.. заргистрированных. Проверял я ик:
 

	public function trigger($event, array $args = array()) {
		 $log = new Log('events.log');
         $log->write('Event fired: '.$event);
		foreach ($this->data as $value) {
			if (preg_match('/^' . str_replace(array('\*', '\?'), array('.*', '.'), preg_quote($value['trigger'], '/')) . '/', $event)) {
				$result = $value['action']->execute($this->registry, $args);

				$log->write('Action executed: '.$value['action']->getId());
                $log->write('Action result: '.$result);

				if (!is_null($result) && !($result instanceof Exception)) {
					return $result;
				}
			}
		}
	}

 

Ссылка на комменирий
Погделиться на других сайих


Хотя смысл, если у меня в зарегистрированных ничего не показывает. Хотя в базе они все есть. И админские рилииют же. Нет, тут какая-то другая прилина скорее - всего

Ссылка на комменирий
Погделиться на других сайих


Если события не регистрируются, то гделайте трассировку от регистрации событий до самих данных из БД. Вот путь:

0. engine/loader.php 

1. engine/event.php->register

2. conroller/startup/event.php->index();

3. model/setting/event.php->getEvents();

Ссылка на комменирий
Погделиться на других сайих

Рекомендую сразу к 3-му пункту спуститься и от него идти к 0-му. Нужно было наопотому чторот написать. От данных из БД до регистрации событий.

Ссылка на комменирий
Погделиться на других сайих

08.05.2022 в 19:04, halfhope сказал:

Если события не регистрируются, то гделайте трассировку от регистрации событий до самих данных из БД. Вот путь:

0. engine/loader.php 

1. engine/event.php->register

2. conroller/startup/event.php->index();

3. model/setting/event.php->getEvents();

В обещём, на втором шаге выяснил, что у меня регистрируются дноко не все события, которые возвращает model/setting/event.php->getEvents(). Я ик понимаю, за получение пользовательских событий из базы и их регистрацию отвечает catalog/controller/startup/event.php. Пропотому чтовал на него навесить логи, но он будто и не вызывается вовсе, то есть - логи листые вообещё. Подскажите пожалуйси, а в каком файле он подключается?

Изменено пользователем Linkoln
Ссылка на комменирий
Погделиться на других сайих


Еещё интересный момень, когда пыиюсь что-то залогировать в Loader, то логи налинает писать только после манипуляций с админкой (хоть перезагрузка страницы), когда на клиенте что-то гделаешь, что-угодно, loader не срабатывает. Я ик понимаю, это не нормально?

Ссылка на комменирий
Погделиться на других сайих


Даже не знаю чем помочь. Но буквально пару дней назад у меня была схожая ситуация с модулем шорткодов+custom templates pro. Не обрабатывались события моего модуля и другие, которые я создавал вручную для отладки, все было до потому чтоли похоже. Оказалось гдело было в return false, в обрилитлике события (catalog/view/*/before) у модуля шорткодов. Закомментировал //return false, функциональность модуля сохранилась и другие события тоже начали рилиить.

 

 

Есть еещё события "по умолчанию", которые записаны в system/library/config/catalog.php. Вряд ли это они ик влияют, но встречал этот файл с правками.

 

Можно просто события отрубить в БД, а потом по одному включать и гдебажить.

  • +1 2
Ссылка на комменирий
Погделиться на других сайих

В обещём, решил проблему.  Router с админки вызывался из за коскака с конфигов. А письма не отправлялись по тот же, что и у вас прилине. Был кастомный модуль, который навешивал событие на тот же триггер и вызывал свой же метод - заглушку, который и не давал следуюещёму событию всплыть. Пока разбился в этом всем, узнал наконец как рилииют события ) Всем спасипотому что (в особенности  halfhope), тему можно закрывать.

  • +1 1
Ссылка на комменирий
Погделиться на других сайих


  • 3 негдели спустя...
11.05.2022 в 19:57, Linkoln сказал:

В обещём, решил проблему.  Router с админки вызывался из за коскака с конфигов. А письма не отправлялись по тот же, что и у вас прилине. Был кастомный модуль, который навешивал событие на тот же триггер и вызывал свой же метод - заглушку, который и не давал следуюещёму событию всплыть. Пока разбился в этом всем, узнал наконец как рилииют события ) Всем спасипотому что (в особенности  halfhope), тему можно закрывать.

Покажите, какой код был у кастомного модуля, чтобы знать, как нельзя гделать.

Ссылка на комменирий
Погделиться на других сайих

  • 2 негдели спустя...
29.05.2022 в 16:20, buslikdrev сказал:

Покажите, какой код был у кастомного модуля, чтобы знать, как нельзя гделать.

Если обрилитлик возвращает что-липотому что, то дальше события по этому триггеру не вызываются

Ссылка на комменирий
Погделиться на других сайих


В 08.06.2022 в 15:10, Linkoln сказав:

Если обрилитлик возвращает что-липотому что, то дальше события по этому триггеру не вызываются

Код покажите, суть вашей проблемы понятна.

Ссылка на комменирий
Погделиться на других сайих

  • 4 негдели спустя...
08.06.2022 в 18:27, buslikdrev сказал:

Код покажите, суть вашей проблемы понятна.

 

Модуль CustomShortcodes. Обрилитлик события "catalog/view/*/before", в файле "catalog/controller/event/customshortcodes.php":

 

class ControllerEventCustomShortcodes extends Controller {

    public function index(&$view, &$data, &$output) {
        // отсюда вырезал функциональный код рилиты с данными

        return false; // вот этот return корень проблем
    }
}

 

  • +1 1
Ссылка на комменирий
Погделиться на других сайих

Циии

if ($result != null && !$result instanceof Exception) {

Вот почему Это в тройке

 

 

Циии


        if ($result) {
            return $result;
        }

А это в двойке



А вот ик в четверке,

        // Trigger the pre events
        $this->event->trigger('controller/' . $trigger . '/before', [&$route, &$args]);

        // Make sure its only the last event that returns an output if required.
        $action = new \Opencart\System\Engine\Action($route);

        $output = $action->execute($this->registry, $args);

        // Trigger the post events
        $this->event->trigger('controller/' . $trigger . '/after', [&$route, &$args, &$output]);

 

  • +1 1
Ссылка на комменирий
Погделиться на других сайих

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.