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

Задвоился модуль. Дважды вызывается метод index


Recommended Posts

Добрый день! Может кто встречался с такой проблемой:

 

Есть модуль в extension-modules - добавляю его в макет страницы (один раз!) - он выводится дважды. При этом даже если внутри контроллера модуля в методе index() вместо вывода шаблона вывести echo "Что-нибудь", а весь остальной код index закомментировать - все равно видно, что метод index() модуля вызывается дважды.

 

Все кэши чистил не по разу. В базе данных в шаблоне модуль проверял - встречается только один раз. Остальные модули работают нормально. В админке модуль тоже в одном экземпляре.

Надіслати
Поділитися на інших сайтах


Код вызова контроллера в студию, конец индекса вызываемого модуля навроде this->output->loadview('*.twig') тоже. Ещё есть около фантастический вариант, что этот модуль триггерит один из евентов, а тот вызывает его повторно, так что в них тоже можно посмотреть

Надіслати
Поділитися на інших сайтах


30 минут назад, ArtValensky сказал:

модуль триггерит один из евентов

ты сам-то понял что сказал? во-первых, тригер, это по-сути переключатель on-off. во-вторых, модули выводятся в шаблон без учета событий. в-третьих, чудес не бывает - если вызывается дважды, то и подключен дважды!

Надіслати
Поділитися на інших сайтах

В 21.08.2020 в 19:53, esculapra сказал:

ты сам-то понял что сказал? во-первых, тригер, это по-сути переключатель on-off. во-вторых, модули выводятся в шаблон без учета событий. в-третьих, чудес не бывает - если вызывается дважды, то и подключен дважды!

Странно а мне метод ядра линкующий нужные контроллеры, говорит что pre_action, учитываются и я не вижу никаких условий навроде "идёт вывод модулей" а в сам pre_action можно подсунуть что угодно) А ещё третье поле таблицы "твойпрефикс_"events своим названием trigger SELECT `trigger` FROM `oc_event` , как бы намекает что само событие ты как бы триггеришь. А ещё видов триггеров вагон и маленькая тележка, от отрицания до ячейки памяти, раз уж ты решил писюнами меряться а не по теме помочь)

 

P.S говоря метод ядра я имею в виду 

 

    public function dispatch(Action $actionAction $error)
    {
        $this->error = $error;
 
        foreach ($this->pre_action as $pre_action) {
            $result = $this->execute($pre_action);
 
            if ($result instanceof Action) {
                $action = $result;
 
                break;
            }
        }
 
        while ($action instanceof Action) {
            $action = $this->execute($action);
        }
    }

 

в классе route

 

Да и фреймворк вроде без оглядки на что либо просто тянет все pre_action какие есть из таблицы 

if ($config->has('action_pre_action')) {
    foreach ($config->get('action_pre_action') as $value) {
        $route->addPreAction(new Action($value));
    }
}

 

В то время как сам эвент возвращает $result без каких либо $this->output, что намекает на то что скрипт может спокойно взять его и работать дальше, exit() не вызван.

    public function trigger($eventarray $args = array()) {
        foreach ($this->data as $value) {
            if (preg_match('/^' . str_replace(array('\*''\?'), array('.*''.'), preg_quote($value['trigger'], '/')) . '/'$event)) {
                $result = $value['action']->execute($this->registry$args);
 
                if (!is_null($result) && !($result instanceof Exception)) {
                    return $result;
                }
            }
        }
    }
Змінено користувачем ArtValensky
Надіслати
Поділитися на інших сайтах


8 минут назад, ArtValensky сказал:

trigger SELECT `trigger` FROM `oc_event`

При загрузке модуля как это можно вызвать? Никак. Для маскла триггер не вызывается непосредственно, а исполняется при наступлении определенного события ( вставка, удаление, обновление строки ). Скинь ссылку, где происходит дубль. Возможно имеется js, который провоцирует событие.

Надіслати
Поділитися на інших сайтах

7 минут назад, esculapra сказал:

При загрузке модуля как это можно вызвать? Никак. Для маскла триггер не вызывается непосредственно, а исполняется при наступлении определенного события ( вставка, удаление, обновление строки ). Скинь ссылку, где происходит дубль. Возможно имеется js, который провоцирует событие.

Да при загрузке приложения как минимум 5-6 pre_action выполняется, которые триггерят все контроллеры из catalog/controller/startup, и да, я сразу сказал что это из разряда фантастики, но всякое бывает. Там всё что угодно может быть, вплоть до задвоенной записи вызова модуля в xml модификаторе. И да помощь нужна не мне) Скорее всего это всё таки js событие либо в сторейдже модификаторов дургой код, мб человек смотрит в обычный контроллер а не в модифицированный)

 

Речь кстати не про триггеры сукеля, а про евенты которые прописаны в самом опке

Змінено користувачем ArtValensky
Надіслати
Поділитися на інших сайтах


2 часа назад, ArtValensky сказал:

Речь кстати не про триггеры сукеля, а про евенты которые прописаны в самом опке

А шо мы митингуем? ТС не в диалоге, то и нам побоку.

Надіслати
Поділитися на інших сайтах

Прошу прощения, что пропал.

 

Проблема была в том, что не проверял статусы модулей. У корневого настройки были в нуле (поле статус), при создании экземпляра модуля, статус устанавливался на 1 (активен).

 

В итоге системе передавался и корень и дочка. У одного все сеттингсы были нулевые, у дочки - заполненные. Отображались оба.

 

Когда стал проверять есть ли настройки вообще (и статус 1 в частности) - все заработало. 

 

Еще раз прошу прощения что сразу не отписался и стал причиной такой дискуссии. Подчерпнул из нее, кстати, не мало для себя полезного.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

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

Important Information

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