Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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


Recommended Posts

Posted (edited)

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

Edited by Linkoln
Link to comment
Share on other sites


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

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

 

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

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

Link to comment
Share on other sites

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;
				}
			}
		}
	}

 

Link to comment
Share on other sites


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

Link to comment
Share on other sites


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

0. engine/loader.php 

1. engine/event.php->register

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Posted (edited)
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. Пробовал на него навесить логи, но он будто и не вызывается вовсе, то есть - логи чистые вообще. Подскажите пожалуйста, а в каком файле он подключается?

Edited by Linkoln
Link to comment
Share on other sites


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

Link to comment
Share on other sites


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

 

 

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

 

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

  • +1 2
Link to comment
Share on other sites

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

  • +1 1
Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.