Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

karpo518

Новачок
  
  • Публікації

    11
  • З нами

  • Відвідування

Усі публікації користувача karpo518

  1. Добрый день! 1. Поэскпериментировав с событиями, контроллера, я пришёл к выводу, что из коробки в Opencart нет событий для конкретных action контроллера. Например, событие controller/product/product/after существует, а событие controller/product/product/index/after не существует. Верно? 2. При дебаге параметров передаваемых в обработчик события я получаю 'route' => 'product/product', 'args' => NULL, 'output' => NULL. Так и должно быть? Неужели мне самому нужно парсить get и post? Например, мне нужна не случайная цифра из get запроса, а реальный id товара. В контроллере это число проверяется, но в обработчик события не попадает 3. Не получается перехватить события корзины. Следующий код работает: 'controller/product/product/after' => array( 'extension/module/my_module/detail_event_handler' ), А вот этот не работает(action-обработчик не срабатывает): 'controller/checkout/cart/after' => array( 'extension/module/my_module/add_event_handler' ) В чём может быть причина?
  2. @Venter, без вас я ещё долго ковырялся бы. Я намеренно исключил код касающийся дебага событий в админке. Как я понял, баг не затрагивает админку. Но события админки работают независимо. Т.е. не получится дописать события в конфиг админки и завязать их на контроллер фронта. Меня также насторожило отсутствие контроллера для дебага в админке. Пока события админки не требуются, но думаю, что там всё заработает, если скопировать туда контроллер debug
  3. Большое вам спасибо за помощь в решении проблемы. На основе вашего решения я настроил своё. Ниже укажу всё в одном посте. Проблема: При попытке включения отладки событий во frontend у меня вылетает ошибка: PHP Fatal error: Uncaught Twig_Error_Loader: Unable to find template "common/column_left.twig" (looked into: /public_html/catalog/view/theme). in /public_html/system/library/template/Twig/Loader/Filesystem.php:215\nStack trace:\n#0 /public_html/system/library/template/Twig/Loader/Filesystem.php(139): Twig_Loader_Filesystem->findTemplate('common/column_l...')\n#1 /public_html/system/library/template/Twig/Environment.php(312): Twig_Loader_Filesystem->getCacheKey('common/column_l...')\n#2 /public_html/system/library/template/Twig/Environment.php(378): Twig_Environment->getTemplateClass('common/column_l...', NULL)\n#3 /public_html/system/library/template/twig.php(33): Twig_Environment->loadTemplate('common/column_l...')\n#4 /public_html/system/library/template.php(51): Template\\Twig->render('common/col in /public_html/system/library/template/Twig/Loader/Filesystem.php on line 215 Ниже решение, которое мне помогло 1. В файле index.php после строки define('VERSION', '3.0.2.0'); добавил код: // Включить отладку событий в catalog define('DEBUG_CATALOG_EVENTS', true); 2. В файле system/config/catalog.php вынес из массива код для дебага, т.е. заменил код: // Action Events $_['action_event'] = array( 'controller/*/before' => array( 'event/language/before' ), 'controller/*/after' => array( 'event/language/after' ), 'view/*/before' => array( 500 => 'event/theme/override', 998 => 'event/language', 1000 => 'event/theme' ), 'language/*/after' => array( 'event/translation' ), //'view/*/before' => array( // 1000 => 'event/debug/before' //), 'controller/*/after' => array( 'event/debug/after' ) ); на код // Action Events $_['action_event'] = array( 'controller/*/before' => array( 'event/language/before' ), 'controller/*/after' => array( 'event/language/after' ), 'view/*/before' => array( 500 => 'event/theme/override', 998 => 'event/language', 1000 => 'event/theme' ), 'language/*/after' => array( 'event/translation' ), 'controller/*/after' => array( 'event/debug/after' ) ); if( defined('DEBUG_CATALOG_EVENTS') && DEBUG_CATALOG_EVENTS ) { $_['action_event']['view/*/before'] = array( 1000 => 'event/debug/before' ); } 3. В system/library/template/Twig/Loader/Filesystem.php перед строкой foreach ($this->paths[$namespace] as $path) добавил код: //Делаем проверку админка или фронт if( defined('DEBUG_CATALOG_EVENTS') && DEBUG_CATALOG_EVENTS ) { $shortname = 'default/template/'.$shortname; } 4. В catalog/controller/event/debug.php исправил ошибку, которая вызывает notice на PHP 7.1+. Заменил строку: 'time' => microtime() - $this->session->data['debug'][$route] на 'time' => (float)microtime() - (float)$this->session->data['debug'][$route]
  4. В github Opencart есть такая страница https://github.com/opencart/opencart/wiki/Events-System Там указано как включить debug событий и как мониторить срабатывание событий http://joxi.ru/nAyLpBaIgd1J32 Согласно этой статье я открыл файл system/config/catalog.php и раскомментил в нём код: // Action Events $_['action_event'] = array( 'controller/*/before' => array( 'event/language/before' ), 'controller/*/after' => array( 'event/language/after' ), 'view/*/before' => array( 500 => 'event/theme/override', 998 => 'event/language', 1000 => 'event/theme' ), 'language/*/after' => array( 'event/translation' ), //'view/*/before' => array( // 1000 => 'event/debug/before' //), 'controller/*/after' => array( 'event/debug/after' ) ); После этого теоретически в лог /storage/logs/error.log должно было что-то писаться. Вместо этого публичные страницы сайта валятся с 500 ошибкой. В логе я получаю ошибку, которая уже несколько лет не может быть изучена в соседней теме а именно PHP Fatal error: Uncaught Twig_Error_Loader: Unable to find template "common/column_left.twig" (looked into: /public_html/catalog/view/theme). in /public_html/system/library/template/Twig/Loader/Filesystem.php:215\nStack trace:\n#0 /public_html/system/library/template/Twig/Loader/Filesystem.php(139): Twig_Loader_Filesystem->findTemplate('common/column_l...')\n#1 /public_html/system/library/template/Twig/Environment.php(312): Twig_Loader_Filesystem->getCacheKey('common/column_l...')\n#2 /public_html/system/library/template/Twig/Environment.php(378): Twig_Environment->getTemplateClass('common/column_l...', NULL)\n#3 /public_html/system/library/template/twig.php(33): Twig_Environment->loadTemplate('common/column_l...')\n#4 /public_html/system/library/template.php(51): Template\\Twig->render('common/col in /public_html/system/library/template/Twig/Loader/Filesystem.php on line 215 Ocstore 3.0.2.0 чистый и нетронутый за исключением нескольких файлов-болванок раскиданных по директориям под будущий модуль. Я почистил кеш модификаторов, а также кеш в шестеренке и историю просмотров в редакторе шаблона (там и не было никаких записей). При чистке кешей словил ошибку http://joxi.ru/Drl7KNwCVzPlpA В логе CMS обнаружил вот такую ошибку: 2020-06-09 15:31:47 - PHP Notice: Trying to access array offset on value of type null in /home/c/co82734/ocstoredemo.tw1.ru/storage/vendor/scss.inc.php on line 1753 Вобщем-то очень удачно включил я дебаг. Если код обратно закомментить, ошибка пропадает
  5. Что-то тема притихла. Аналогичная проблема. История просмотров в редакторе пуста. На странице модификаторов нажимал иконку "Обновить". Не помогло
  6. Я так и не нашёл никакого списка доступных событий магазина. Только события перед и после action. Такие события больше подходят для фреймворков. Мы же говорим о коробочном продукте, в котором вызов конкретного action - достаточно абстрактное и не информативное событие.
  7. Добрый день! Подскажите, пожалуйста, где можно почитать про разработку модулей. В частности не нашёл на https://docs.ocstore.com/ информацию о том событиях, которые можно использовать в модулях. Интересуют следующие: Включение и выключение модуля Просмотр страницы товара (если есть такое) Добавление и удаление товара в корзине Оформление заказов Также хотел бы узнать, как создавать страницы модуля в админке. В целом интересуют общие принципы разработки модулей без использования модификаторов. Есть какой-то мануал? Буду благодарен любым ссылкам. С Opecart я знаком, но модули под него никогда не писал

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.