Jump to content

karpo518

Новичок
  • Content Count

    11
  • Joined

  • Last visited

Community Reputation

0 Обычный

About karpo518

  • Rank
    Пользователь

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  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

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.