ArtemPitov Опубліковано: 21 вересня 2016 Share Опубліковано: 21 вересня 2016 (змінено) Доброго времени суток Залез я разбираться с событиями в ОП2 и непонятно где они создаются к примеру отзывы, вот тут сам вызов по старту отзыва $this->event->trigger('pre.review.add', $data); ну и когда все отработало $this->event->trigger('post.review.add', $review_id); а где сам register $this->event->register и что он обрабатывает так и не нашел, поясните что куда и зачем, спасибо Змінено 21 вересня 2016 користувачем ArtenPitov Надіслати Поділитися на інших сайтах More sharing options... ocdev_pro Опубліковано: 21 вересня 2016 Share Опубліковано: 21 вересня 2016 Тоже кстати интересно для каких целей это чудо в oc2 можно применять на практике?Была идея реализовать модуль для "прогрева кеша (mem)" с помощу ивентов. Что может быть еще? Надіслати Поділитися на інших сайтах More sharing options... ashap Опубліковано: 21 вересня 2016 Share Опубліковано: 21 вересня 2016 http://sv2109.com/ru/article/%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9-event-%D0%B2-opencart-%D1%87%D0%B0%D1%81%D1%82%D1%8C-1-%D0%B8%D0%B7-3-%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 вересня 2016 Share Опубліковано: 21 вересня 2016 Ой.. много чего :) Вы регистрируете событие и все!!!! В 2.3 оно само выполнится.. В событие поступает все входные данные для метода. Если событие возвращает true, то оно не дает выполняться самому методу. Где применить... Вам нужно вызвать метод getProducts (но облегченный или наооборот, более тяжелый, чем родной , только для вашего модуля) Вы создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос).. Опа!!! И вы быстренько, без пыли, воспользовались стандартным методом. Не меняя всего запроса) Надіслати Поділитися на інших сайтах More sharing options... 6 months later... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 В 21.09.2016 в 21:34, chukcha сказал: Вы создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос).. Каким образом это можно осуществить? Если вы про __METHOD__, то получите не метод который вызвал событие, а метод из своего модуля, где вы эту строку и прописали. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Я про event "Каждый" метод имеет два события - before и after 19 минут назад, arni сказал: Если вы про __METHOD__, Это причем? Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) 1 час назад, chukcha сказал: Я про event "Каждый" метод имеет два события - before и after 1 час назад, arni сказал: Если вы про __METHOD__, Это причем? вы пишите: "создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос" Под "создаете событие", насколько я понял, вы понимаете создание обработчика события , который повесит выполнение нужного метода/класса своего модуля на определенное событие - например подключение модели. Вот меня интересует как в своем методе, который будет вызван, вы собираетесь проверить "какой метод его вызвал"? Ведь событие не вызывается каким-либо методом, событие вызывается подключением всего класса целиком, например так $this->load->model('account/address'); Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 18 минут назад, chukcha сказал: Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Данные передаются не в событие, а в обработчик события (метод trigger). В зависимости от типа события (для контроллера, модели и тд.) в обработчик передаются разные данные, но в любом случае, среди этих данных нет названия метода который вызвал событие. Т.к. я уже писал - не метод вызывает событие, а загрузка класса целиком со всеми его методами. Пример события: catalog/model/extension/extension/before сработает перед загрузкой модели extension/extension. аргумент $route, который получит метод модуля, будет содержать extension/extension, но вовсе не название какого-либо метода события. Вообще вызов метода модели происходит уже после того, как отработает наш модуль. Того я спрашиваю, как это вы собираетесь сделать: "проверяете в нем какой метод его вызвал"? Т.к. на момент выполнения своего метода, повешенного обработчиком на определенное событие, никакой метод того события еще не будет выполнен. Смотрите файл system\engine\loader.php, там видно что передается в обработчик события, и это не метод, который его вызвал. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 catalog/model/ extension/extension/ before Єто и есть роут который доступен в обработчике события (если вам так удобно) перед вызовом метода модели extension/extension/ будет вызван ваш обработчик Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Вы не внимательно прочитали - я это уже описал выше: "аргумент $route, который получит метод модуля, будет содержать extension/extension" extension/extension - тут нет названия метода, тут есть только класс модели, который его вызвал (не всегда класс содержит только один метод). А я спрашивал про метод! Т.к. вы писали "проверяете в нем какой метод его вызвал". Хотя, по-моему вы просто перепутали класс с методом. Класс, конечно, можно получить из роута, только это далеко не название метода. Смысла узнать какой класс вызвал событие из метода своего модуля не много, т.к. когда устанавливается обработчик события, он уже цепляется на определенный класс. Другое дело, если бы, как вы писали, какой-то отдельный метод класса вызывал обработчик события, тогда было бы можно легко изменить этот метод под свои нужды. Вот в этом мой вопрос и состоял. Т.к. я пока не придумал легкого способа подмены одного из методов класса, который вызвал событие. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 class ControllerEventXxxxYyyyy extends Controller { public function before(&$route, &$data) { public function view(&$view, &$data, &$output) { где роут - метод того, кто вызвал foreach ($actions as $action) { $result = $action->execute($this->registry, $args); if (!is_null($result) && !($result instanceof Exception)) { return $result; } // Trigger the pre events $result = $registry->get('event')->trigger('model/' . $route . '/before', array(&$route, &$args, &$output)); if ($result) { return $result; } Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) Так нагляднее: Получаем модель в контроллере: $this->load->model('checkout/order'); роут у нас получится checkout/order. Это не метод, который вызывает событие, а только класс. При получении модели, методы не указываются в роуте! К моменту выполнения следующей строки кода в классе модели, событие уже прошло (и то что перед и то что после) Открываем файл самой модели catalog\model\checkout\order.php - там несколько методов. Далее в контроллере вызов одного такого метода (getOrder) данной модели: $order_info = $this->model_checkout_order->getOrder($order_id); как видите, методы уже загружены, к ним есть доступ, но эта строка кода вызова отдельного метода уже не приводит к возникновению событий. А строка загрузки модели не содержит какой-либо метод, т.к. грузит все методы. В результате из своего кода ни в роуте ни в другой переменной мы не можем получить метод который вызывает событие, т.к. метод модели событие не вызывает, а в роуте для модели метод не прописывается. Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Пісочниця События aka Event Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
ocdev_pro Опубліковано: 21 вересня 2016 Share Опубліковано: 21 вересня 2016 Тоже кстати интересно для каких целей это чудо в oc2 можно применять на практике?Была идея реализовать модуль для "прогрева кеша (mem)" с помощу ивентов. Что может быть еще? Надіслати Поділитися на інших сайтах More sharing options... ashap Опубліковано: 21 вересня 2016 Share Опубліковано: 21 вересня 2016 http://sv2109.com/ru/article/%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9-event-%D0%B2-opencart-%D1%87%D0%B0%D1%81%D1%82%D1%8C-1-%D0%B8%D0%B7-3-%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 вересня 2016 Share Опубліковано: 21 вересня 2016 Ой.. много чего :) Вы регистрируете событие и все!!!! В 2.3 оно само выполнится.. В событие поступает все входные данные для метода. Если событие возвращает true, то оно не дает выполняться самому методу. Где применить... Вам нужно вызвать метод getProducts (но облегченный или наооборот, более тяжелый, чем родной , только для вашего модуля) Вы создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос).. Опа!!! И вы быстренько, без пыли, воспользовались стандартным методом. Не меняя всего запроса) Надіслати Поділитися на інших сайтах More sharing options... 6 months later... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 В 21.09.2016 в 21:34, chukcha сказал: Вы создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос).. Каким образом это можно осуществить? Если вы про __METHOD__, то получите не метод который вызвал событие, а метод из своего модуля, где вы эту строку и прописали. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Я про event "Каждый" метод имеет два события - before и after 19 минут назад, arni сказал: Если вы про __METHOD__, Это причем? Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) 1 час назад, chukcha сказал: Я про event "Каждый" метод имеет два события - before и after 1 час назад, arni сказал: Если вы про __METHOD__, Это причем? вы пишите: "создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос" Под "создаете событие", насколько я понял, вы понимаете создание обработчика события , который повесит выполнение нужного метода/класса своего модуля на определенное событие - например подключение модели. Вот меня интересует как в своем методе, который будет вызван, вы собираетесь проверить "какой метод его вызвал"? Ведь событие не вызывается каким-либо методом, событие вызывается подключением всего класса целиком, например так $this->load->model('account/address'); Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 18 минут назад, chukcha сказал: Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Данные передаются не в событие, а в обработчик события (метод trigger). В зависимости от типа события (для контроллера, модели и тд.) в обработчик передаются разные данные, но в любом случае, среди этих данных нет названия метода который вызвал событие. Т.к. я уже писал - не метод вызывает событие, а загрузка класса целиком со всеми его методами. Пример события: catalog/model/extension/extension/before сработает перед загрузкой модели extension/extension. аргумент $route, который получит метод модуля, будет содержать extension/extension, но вовсе не название какого-либо метода события. Вообще вызов метода модели происходит уже после того, как отработает наш модуль. Того я спрашиваю, как это вы собираетесь сделать: "проверяете в нем какой метод его вызвал"? Т.к. на момент выполнения своего метода, повешенного обработчиком на определенное событие, никакой метод того события еще не будет выполнен. Смотрите файл system\engine\loader.php, там видно что передается в обработчик события, и это не метод, который его вызвал. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 catalog/model/ extension/extension/ before Єто и есть роут который доступен в обработчике события (если вам так удобно) перед вызовом метода модели extension/extension/ будет вызван ваш обработчик Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Вы не внимательно прочитали - я это уже описал выше: "аргумент $route, который получит метод модуля, будет содержать extension/extension" extension/extension - тут нет названия метода, тут есть только класс модели, который его вызвал (не всегда класс содержит только один метод). А я спрашивал про метод! Т.к. вы писали "проверяете в нем какой метод его вызвал". Хотя, по-моему вы просто перепутали класс с методом. Класс, конечно, можно получить из роута, только это далеко не название метода. Смысла узнать какой класс вызвал событие из метода своего модуля не много, т.к. когда устанавливается обработчик события, он уже цепляется на определенный класс. Другое дело, если бы, как вы писали, какой-то отдельный метод класса вызывал обработчик события, тогда было бы можно легко изменить этот метод под свои нужды. Вот в этом мой вопрос и состоял. Т.к. я пока не придумал легкого способа подмены одного из методов класса, который вызвал событие. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 class ControllerEventXxxxYyyyy extends Controller { public function before(&$route, &$data) { public function view(&$view, &$data, &$output) { где роут - метод того, кто вызвал foreach ($actions as $action) { $result = $action->execute($this->registry, $args); if (!is_null($result) && !($result instanceof Exception)) { return $result; } // Trigger the pre events $result = $registry->get('event')->trigger('model/' . $route . '/before', array(&$route, &$args, &$output)); if ($result) { return $result; } Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) Так нагляднее: Получаем модель в контроллере: $this->load->model('checkout/order'); роут у нас получится checkout/order. Это не метод, который вызывает событие, а только класс. При получении модели, методы не указываются в роуте! К моменту выполнения следующей строки кода в классе модели, событие уже прошло (и то что перед и то что после) Открываем файл самой модели catalog\model\checkout\order.php - там несколько методов. Далее в контроллере вызов одного такого метода (getOrder) данной модели: $order_info = $this->model_checkout_order->getOrder($order_id); как видите, методы уже загружены, к ним есть доступ, но эта строка кода вызова отдельного метода уже не приводит к возникновению событий. А строка загрузки модели не содержит какой-либо метод, т.к. грузит все методы. В результате из своего кода ни в роуте ни в другой переменной мы не можем получить метод который вызывает событие, т.к. метод модели событие не вызывает, а в роуте для модели метод не прописывается. Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Пісочниця События aka Event Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
ashap Опубліковано: 21 вересня 2016 Share Опубліковано: 21 вересня 2016 http://sv2109.com/ru/article/%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9-event-%D0%B2-opencart-%D1%87%D0%B0%D1%81%D1%82%D1%8C-1-%D0%B8%D0%B7-3-%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 вересня 2016 Share Опубліковано: 21 вересня 2016 Ой.. много чего :) Вы регистрируете событие и все!!!! В 2.3 оно само выполнится.. В событие поступает все входные данные для метода. Если событие возвращает true, то оно не дает выполняться самому методу. Где применить... Вам нужно вызвать метод getProducts (но облегченный или наооборот, более тяжелый, чем родной , только для вашего модуля) Вы создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос).. Опа!!! И вы быстренько, без пыли, воспользовались стандартным методом. Не меняя всего запроса) Надіслати Поділитися на інших сайтах More sharing options... 6 months later... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 В 21.09.2016 в 21:34, chukcha сказал: Вы создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос).. Каким образом это можно осуществить? Если вы про __METHOD__, то получите не метод который вызвал событие, а метод из своего модуля, где вы эту строку и прописали. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Я про event "Каждый" метод имеет два события - before и after 19 минут назад, arni сказал: Если вы про __METHOD__, Это причем? Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) 1 час назад, chukcha сказал: Я про event "Каждый" метод имеет два события - before и after 1 час назад, arni сказал: Если вы про __METHOD__, Это причем? вы пишите: "создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос" Под "создаете событие", насколько я понял, вы понимаете создание обработчика события , который повесит выполнение нужного метода/класса своего модуля на определенное событие - например подключение модели. Вот меня интересует как в своем методе, который будет вызван, вы собираетесь проверить "какой метод его вызвал"? Ведь событие не вызывается каким-либо методом, событие вызывается подключением всего класса целиком, например так $this->load->model('account/address'); Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 18 минут назад, chukcha сказал: Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Данные передаются не в событие, а в обработчик события (метод trigger). В зависимости от типа события (для контроллера, модели и тд.) в обработчик передаются разные данные, но в любом случае, среди этих данных нет названия метода который вызвал событие. Т.к. я уже писал - не метод вызывает событие, а загрузка класса целиком со всеми его методами. Пример события: catalog/model/extension/extension/before сработает перед загрузкой модели extension/extension. аргумент $route, который получит метод модуля, будет содержать extension/extension, но вовсе не название какого-либо метода события. Вообще вызов метода модели происходит уже после того, как отработает наш модуль. Того я спрашиваю, как это вы собираетесь сделать: "проверяете в нем какой метод его вызвал"? Т.к. на момент выполнения своего метода, повешенного обработчиком на определенное событие, никакой метод того события еще не будет выполнен. Смотрите файл system\engine\loader.php, там видно что передается в обработчик события, и это не метод, который его вызвал. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 catalog/model/ extension/extension/ before Єто и есть роут который доступен в обработчике события (если вам так удобно) перед вызовом метода модели extension/extension/ будет вызван ваш обработчик Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Вы не внимательно прочитали - я это уже описал выше: "аргумент $route, который получит метод модуля, будет содержать extension/extension" extension/extension - тут нет названия метода, тут есть только класс модели, который его вызвал (не всегда класс содержит только один метод). А я спрашивал про метод! Т.к. вы писали "проверяете в нем какой метод его вызвал". Хотя, по-моему вы просто перепутали класс с методом. Класс, конечно, можно получить из роута, только это далеко не название метода. Смысла узнать какой класс вызвал событие из метода своего модуля не много, т.к. когда устанавливается обработчик события, он уже цепляется на определенный класс. Другое дело, если бы, как вы писали, какой-то отдельный метод класса вызывал обработчик события, тогда было бы можно легко изменить этот метод под свои нужды. Вот в этом мой вопрос и состоял. Т.к. я пока не придумал легкого способа подмены одного из методов класса, который вызвал событие. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 class ControllerEventXxxxYyyyy extends Controller { public function before(&$route, &$data) { public function view(&$view, &$data, &$output) { где роут - метод того, кто вызвал foreach ($actions as $action) { $result = $action->execute($this->registry, $args); if (!is_null($result) && !($result instanceof Exception)) { return $result; } // Trigger the pre events $result = $registry->get('event')->trigger('model/' . $route . '/before', array(&$route, &$args, &$output)); if ($result) { return $result; } Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) Так нагляднее: Получаем модель в контроллере: $this->load->model('checkout/order'); роут у нас получится checkout/order. Это не метод, который вызывает событие, а только класс. При получении модели, методы не указываются в роуте! К моменту выполнения следующей строки кода в классе модели, событие уже прошло (и то что перед и то что после) Открываем файл самой модели catalog\model\checkout\order.php - там несколько методов. Далее в контроллере вызов одного такого метода (getOrder) данной модели: $order_info = $this->model_checkout_order->getOrder($order_id); как видите, методы уже загружены, к ним есть доступ, но эта строка кода вызова отдельного метода уже не приводит к возникновению событий. А строка загрузки модели не содержит какой-либо метод, т.к. грузит все методы. В результате из своего кода ни в роуте ни в другой переменной мы не можем получить метод который вызывает событие, т.к. метод модели событие не вызывает, а в роуте для модели метод не прописывается. Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Пісочниця События aka Event Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
chukcha Опубліковано: 21 вересня 2016 Share Опубліковано: 21 вересня 2016 Ой.. много чего :) Вы регистрируете событие и все!!!! В 2.3 оно само выполнится.. В событие поступает все входные данные для метода. Если событие возвращает true, то оно не дает выполняться самому методу. Где применить... Вам нужно вызвать метод getProducts (но облегченный или наооборот, более тяжелый, чем родной , только для вашего модуля) Вы создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос).. Опа!!! И вы быстренько, без пыли, воспользовались стандартным методом. Не меняя всего запроса) Надіслати Поділитися на інших сайтах More sharing options... 6 months later... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 В 21.09.2016 в 21:34, chukcha сказал: Вы создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос).. Каким образом это можно осуществить? Если вы про __METHOD__, то получите не метод который вызвал событие, а метод из своего модуля, где вы эту строку и прописали. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Я про event "Каждый" метод имеет два события - before и after 19 минут назад, arni сказал: Если вы про __METHOD__, Это причем? Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) 1 час назад, chukcha сказал: Я про event "Каждый" метод имеет два события - before и after 1 час назад, arni сказал: Если вы про __METHOD__, Это причем? вы пишите: "создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос" Под "создаете событие", насколько я понял, вы понимаете создание обработчика события , который повесит выполнение нужного метода/класса своего модуля на определенное событие - например подключение модели. Вот меня интересует как в своем методе, который будет вызван, вы собираетесь проверить "какой метод его вызвал"? Ведь событие не вызывается каким-либо методом, событие вызывается подключением всего класса целиком, например так $this->load->model('account/address'); Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 18 минут назад, chukcha сказал: Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Данные передаются не в событие, а в обработчик события (метод trigger). В зависимости от типа события (для контроллера, модели и тд.) в обработчик передаются разные данные, но в любом случае, среди этих данных нет названия метода который вызвал событие. Т.к. я уже писал - не метод вызывает событие, а загрузка класса целиком со всеми его методами. Пример события: catalog/model/extension/extension/before сработает перед загрузкой модели extension/extension. аргумент $route, который получит метод модуля, будет содержать extension/extension, но вовсе не название какого-либо метода события. Вообще вызов метода модели происходит уже после того, как отработает наш модуль. Того я спрашиваю, как это вы собираетесь сделать: "проверяете в нем какой метод его вызвал"? Т.к. на момент выполнения своего метода, повешенного обработчиком на определенное событие, никакой метод того события еще не будет выполнен. Смотрите файл system\engine\loader.php, там видно что передается в обработчик события, и это не метод, который его вызвал. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 catalog/model/ extension/extension/ before Єто и есть роут который доступен в обработчике события (если вам так удобно) перед вызовом метода модели extension/extension/ будет вызван ваш обработчик Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Вы не внимательно прочитали - я это уже описал выше: "аргумент $route, который получит метод модуля, будет содержать extension/extension" extension/extension - тут нет названия метода, тут есть только класс модели, который его вызвал (не всегда класс содержит только один метод). А я спрашивал про метод! Т.к. вы писали "проверяете в нем какой метод его вызвал". Хотя, по-моему вы просто перепутали класс с методом. Класс, конечно, можно получить из роута, только это далеко не название метода. Смысла узнать какой класс вызвал событие из метода своего модуля не много, т.к. когда устанавливается обработчик события, он уже цепляется на определенный класс. Другое дело, если бы, как вы писали, какой-то отдельный метод класса вызывал обработчик события, тогда было бы можно легко изменить этот метод под свои нужды. Вот в этом мой вопрос и состоял. Т.к. я пока не придумал легкого способа подмены одного из методов класса, который вызвал событие. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 class ControllerEventXxxxYyyyy extends Controller { public function before(&$route, &$data) { public function view(&$view, &$data, &$output) { где роут - метод того, кто вызвал foreach ($actions as $action) { $result = $action->execute($this->registry, $args); if (!is_null($result) && !($result instanceof Exception)) { return $result; } // Trigger the pre events $result = $registry->get('event')->trigger('model/' . $route . '/before', array(&$route, &$args, &$output)); if ($result) { return $result; } Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) Так нагляднее: Получаем модель в контроллере: $this->load->model('checkout/order'); роут у нас получится checkout/order. Это не метод, который вызывает событие, а только класс. При получении модели, методы не указываются в роуте! К моменту выполнения следующей строки кода в классе модели, событие уже прошло (и то что перед и то что после) Открываем файл самой модели catalog\model\checkout\order.php - там несколько методов. Далее в контроллере вызов одного такого метода (getOrder) данной модели: $order_info = $this->model_checkout_order->getOrder($order_id); как видите, методы уже загружены, к ним есть доступ, но эта строка кода вызова отдельного метода уже не приводит к возникновению событий. А строка загрузки модели не содержит какой-либо метод, т.к. грузит все методы. В результате из своего кода ни в роуте ни в другой переменной мы не можем получить метод который вызывает событие, т.к. метод модели событие не вызывает, а в роуте для модели метод не прописывается. Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Пісочниця События aka Event Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 В 21.09.2016 в 21:34, chukcha сказал: Вы создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос).. Каким образом это можно осуществить? Если вы про __METHOD__, то получите не метод который вызвал событие, а метод из своего модуля, где вы эту строку и прописали. Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Я про event "Каждый" метод имеет два события - before и after 19 минут назад, arni сказал: Если вы про __METHOD__, Это причем? Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) 1 час назад, chukcha сказал: Я про event "Каждый" метод имеет два события - before и after 1 час назад, arni сказал: Если вы про __METHOD__, Это причем? вы пишите: "создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос" Под "создаете событие", насколько я понял, вы понимаете создание обработчика события , который повесит выполнение нужного метода/класса своего модуля на определенное событие - например подключение модели. Вот меня интересует как в своем методе, который будет вызван, вы собираетесь проверить "какой метод его вызвал"? Ведь событие не вызывается каким-либо методом, событие вызывается подключением всего класса целиком, например так $this->load->model('account/address'); Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 18 минут назад, chukcha сказал: Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Данные передаются не в событие, а в обработчик события (метод trigger). В зависимости от типа события (для контроллера, модели и тд.) в обработчик передаются разные данные, но в любом случае, среди этих данных нет названия метода который вызвал событие. Т.к. я уже писал - не метод вызывает событие, а загрузка класса целиком со всеми его методами. Пример события: catalog/model/extension/extension/before сработает перед загрузкой модели extension/extension. аргумент $route, который получит метод модуля, будет содержать extension/extension, но вовсе не название какого-либо метода события. Вообще вызов метода модели происходит уже после того, как отработает наш модуль. Того я спрашиваю, как это вы собираетесь сделать: "проверяете в нем какой метод его вызвал"? Т.к. на момент выполнения своего метода, повешенного обработчиком на определенное событие, никакой метод того события еще не будет выполнен. Смотрите файл system\engine\loader.php, там видно что передается в обработчик события, и это не метод, который его вызвал. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 catalog/model/ extension/extension/ before Єто и есть роут который доступен в обработчике события (если вам так удобно) перед вызовом метода модели extension/extension/ будет вызван ваш обработчик Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Вы не внимательно прочитали - я это уже описал выше: "аргумент $route, который получит метод модуля, будет содержать extension/extension" extension/extension - тут нет названия метода, тут есть только класс модели, который его вызвал (не всегда класс содержит только один метод). А я спрашивал про метод! Т.к. вы писали "проверяете в нем какой метод его вызвал". Хотя, по-моему вы просто перепутали класс с методом. Класс, конечно, можно получить из роута, только это далеко не название метода. Смысла узнать какой класс вызвал событие из метода своего модуля не много, т.к. когда устанавливается обработчик события, он уже цепляется на определенный класс. Другое дело, если бы, как вы писали, какой-то отдельный метод класса вызывал обработчик события, тогда было бы можно легко изменить этот метод под свои нужды. Вот в этом мой вопрос и состоял. Т.к. я пока не придумал легкого способа подмены одного из методов класса, который вызвал событие. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 class ControllerEventXxxxYyyyy extends Controller { public function before(&$route, &$data) { public function view(&$view, &$data, &$output) { где роут - метод того, кто вызвал foreach ($actions as $action) { $result = $action->execute($this->registry, $args); if (!is_null($result) && !($result instanceof Exception)) { return $result; } // Trigger the pre events $result = $registry->get('event')->trigger('model/' . $route . '/before', array(&$route, &$args, &$output)); if ($result) { return $result; } Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) Так нагляднее: Получаем модель в контроллере: $this->load->model('checkout/order'); роут у нас получится checkout/order. Это не метод, который вызывает событие, а только класс. При получении модели, методы не указываются в роуте! К моменту выполнения следующей строки кода в классе модели, событие уже прошло (и то что перед и то что после) Открываем файл самой модели catalog\model\checkout\order.php - там несколько методов. Далее в контроллере вызов одного такого метода (getOrder) данной модели: $order_info = $this->model_checkout_order->getOrder($order_id); как видите, методы уже загружены, к ним есть доступ, но эта строка кода вызова отдельного метода уже не приводит к возникновению событий. А строка загрузки модели не содержит какой-либо метод, т.к. грузит все методы. В результате из своего кода ни в роуте ни в другой переменной мы не можем получить метод который вызывает событие, т.к. метод модели событие не вызывает, а в роуте для модели метод не прописывается. Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Пісочниця События aka Event Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV
arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) 1 час назад, chukcha сказал: Я про event "Каждый" метод имеет два события - before и after 1 час назад, arni сказал: Если вы про __METHOD__, Это причем? вы пишите: "создаете событие и проверяете в нем какой метод его вызвал и выполняете свой запрос" Под "создаете событие", насколько я понял, вы понимаете создание обработчика события , который повесит выполнение нужного метода/класса своего модуля на определенное событие - например подключение модели. Вот меня интересует как в своем методе, который будет вызван, вы собираетесь проверить "какой метод его вызвал"? Ведь событие не вызывается каким-либо методом, событие вызывается подключением всего класса целиком, например так $this->load->model('account/address'); Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 18 минут назад, chukcha сказал: Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Данные передаются не в событие, а в обработчик события (метод trigger). В зависимости от типа события (для контроллера, модели и тд.) в обработчик передаются разные данные, но в любом случае, среди этих данных нет названия метода который вызвал событие. Т.к. я уже писал - не метод вызывает событие, а загрузка класса целиком со всеми его методами. Пример события: catalog/model/extension/extension/before сработает перед загрузкой модели extension/extension. аргумент $route, который получит метод модуля, будет содержать extension/extension, но вовсе не название какого-либо метода события. Вообще вызов метода модели происходит уже после того, как отработает наш модуль. Того я спрашиваю, как это вы собираетесь сделать: "проверяете в нем какой метод его вызвал"? Т.к. на момент выполнения своего метода, повешенного обработчиком на определенное событие, никакой метод того события еще не будет выполнен. Смотрите файл system\engine\loader.php, там видно что передается в обработчик события, и это не метод, который его вызвал. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 catalog/model/ extension/extension/ before Єто и есть роут который доступен в обработчике события (если вам так удобно) перед вызовом метода модели extension/extension/ будет вызван ваш обработчик Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Вы не внимательно прочитали - я это уже описал выше: "аргумент $route, который получит метод модуля, будет содержать extension/extension" extension/extension - тут нет названия метода, тут есть только класс модели, который его вызвал (не всегда класс содержит только один метод). А я спрашивал про метод! Т.к. вы писали "проверяете в нем какой метод его вызвал". Хотя, по-моему вы просто перепутали класс с методом. Класс, конечно, можно получить из роута, только это далеко не название метода. Смысла узнать какой класс вызвал событие из метода своего модуля не много, т.к. когда устанавливается обработчик события, он уже цепляется на определенный класс. Другое дело, если бы, как вы писали, какой-то отдельный метод класса вызывал обработчик события, тогда было бы можно легко изменить этот метод под свои нужды. Вот в этом мой вопрос и состоял. Т.к. я пока не придумал легкого способа подмены одного из методов класса, который вызвал событие. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 class ControllerEventXxxxYyyyy extends Controller { public function before(&$route, &$data) { public function view(&$view, &$data, &$output) { где роут - метод того, кто вызвал foreach ($actions as $action) { $result = $action->execute($this->registry, $args); if (!is_null($result) && !($result instanceof Exception)) { return $result; } // Trigger the pre events $result = $registry->get('event')->trigger('model/' . $route . '/before', array(&$route, &$args, &$output)); if ($result) { return $result; } Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) Так нагляднее: Получаем модель в контроллере: $this->load->model('checkout/order'); роут у нас получится checkout/order. Это не метод, который вызывает событие, а только класс. При получении модели, методы не указываются в роуте! К моменту выполнения следующей строки кода в классе модели, событие уже прошло (и то что перед и то что после) Открываем файл самой модели catalog\model\checkout\order.php - там несколько методов. Далее в контроллере вызов одного такого метода (getOrder) данной модели: $order_info = $this->model_checkout_order->getOrder($order_id); как видите, методы уже загружены, к ним есть доступ, но эта строка кода вызова отдельного метода уже не приводит к возникновению событий. А строка загрузки модели не содержит какой-либо метод, т.к. грузит все методы. В результате из своего кода ни в роуте ни в другой переменной мы не можем получить метод который вызывает событие, т.к. метод модели событие не вызывает, а в роуте для модели метод не прописывается. Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Пісочниця События aka Event
arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 18 минут назад, chukcha сказал: Посмотрите в сторону событий OC как вызывается событие, в какой момент происходит вызрв события, какие данные предаются в событие событие - event Данные передаются не в событие, а в обработчик события (метод trigger). В зависимости от типа события (для контроллера, модели и тд.) в обработчик передаются разные данные, но в любом случае, среди этих данных нет названия метода который вызвал событие. Т.к. я уже писал - не метод вызывает событие, а загрузка класса целиком со всеми его методами. Пример события: catalog/model/extension/extension/before сработает перед загрузкой модели extension/extension. аргумент $route, который получит метод модуля, будет содержать extension/extension, но вовсе не название какого-либо метода события. Вообще вызов метода модели происходит уже после того, как отработает наш модуль. Того я спрашиваю, как это вы собираетесь сделать: "проверяете в нем какой метод его вызвал"? Т.к. на момент выполнения своего метода, повешенного обработчиком на определенное событие, никакой метод того события еще не будет выполнен. Смотрите файл system\engine\loader.php, там видно что передается в обработчик события, и это не метод, который его вызвал. Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 catalog/model/ extension/extension/ before Єто и есть роут который доступен в обработчике события (если вам так удобно) перед вызовом метода модели extension/extension/ будет вызван ваш обработчик Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Вы не внимательно прочитали - я это уже описал выше: "аргумент $route, который получит метод модуля, будет содержать extension/extension" extension/extension - тут нет названия метода, тут есть только класс модели, который его вызвал (не всегда класс содержит только один метод). А я спрашивал про метод! Т.к. вы писали "проверяете в нем какой метод его вызвал". Хотя, по-моему вы просто перепутали класс с методом. Класс, конечно, можно получить из роута, только это далеко не название метода. Смысла узнать какой класс вызвал событие из метода своего модуля не много, т.к. когда устанавливается обработчик события, он уже цепляется на определенный класс. Другое дело, если бы, как вы писали, какой-то отдельный метод класса вызывал обработчик события, тогда было бы можно легко изменить этот метод под свои нужды. Вот в этом мой вопрос и состоял. Т.к. я пока не придумал легкого способа подмены одного из методов класса, который вызвал событие. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 class ControllerEventXxxxYyyyy extends Controller { public function before(&$route, &$data) { public function view(&$view, &$data, &$output) { где роут - метод того, кто вызвал foreach ($actions as $action) { $result = $action->execute($this->registry, $args); if (!is_null($result) && !($result instanceof Exception)) { return $result; } // Trigger the pre events $result = $registry->get('event')->trigger('model/' . $route . '/before', array(&$route, &$args, &$output)); if ($result) { return $result; } Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) Так нагляднее: Получаем модель в контроллере: $this->load->model('checkout/order'); роут у нас получится checkout/order. Это не метод, который вызывает событие, а только класс. При получении модели, методы не указываются в роуте! К моменту выполнения следующей строки кода в классе модели, событие уже прошло (и то что перед и то что после) Открываем файл самой модели catalog\model\checkout\order.php - там несколько методов. Далее в контроллере вызов одного такого метода (getOrder) данной модели: $order_info = $this->model_checkout_order->getOrder($order_id); как видите, методы уже загружены, к ним есть доступ, но эта строка кода вызова отдельного метода уже не приводит к возникновению событий. А строка загрузки модели не содержит какой-либо метод, т.к. грузит все методы. В результате из своего кода ни в роуте ни в другой переменной мы не можем получить метод который вызывает событие, т.к. метод модели событие не вызывает, а в роуте для модели метод не прописывается. Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 Вы не внимательно прочитали - я это уже описал выше: "аргумент $route, который получит метод модуля, будет содержать extension/extension" extension/extension - тут нет названия метода, тут есть только класс модели, который его вызвал (не всегда класс содержит только один метод). А я спрашивал про метод! Т.к. вы писали "проверяете в нем какой метод его вызвал". Хотя, по-моему вы просто перепутали класс с методом. Класс, конечно, можно получить из роута, только это далеко не название метода. Смысла узнать какой класс вызвал событие из метода своего модуля не много, т.к. когда устанавливается обработчик события, он уже цепляется на определенный класс. Другое дело, если бы, как вы писали, какой-то отдельный метод класса вызывал обработчик события, тогда было бы можно легко изменить этот метод под свои нужды. Вот в этом мой вопрос и состоял. Т.к. я пока не придумал легкого способа подмены одного из методов класса, который вызвал событие. Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 class ControllerEventXxxxYyyyy extends Controller { public function before(&$route, &$data) { public function view(&$view, &$data, &$output) { где роут - метод того, кто вызвал foreach ($actions as $action) { $result = $action->execute($this->registry, $args); if (!is_null($result) && !($result instanceof Exception)) { return $result; } // Trigger the pre events $result = $registry->get('event')->trigger('model/' . $route . '/before', array(&$route, &$args, &$output)); if ($result) { return $result; } Надіслати Поділитися на інших сайтах More sharing options... arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) Так нагляднее: Получаем модель в контроллере: $this->load->model('checkout/order'); роут у нас получится checkout/order. Это не метод, который вызывает событие, а только класс. При получении модели, методы не указываются в роуте! К моменту выполнения следующей строки кода в классе модели, событие уже прошло (и то что перед и то что после) Открываем файл самой модели catalog\model\checkout\order.php - там несколько методов. Далее в контроллере вызов одного такого метода (getOrder) данной модели: $order_info = $this->model_checkout_order->getOrder($order_id); как видите, методы уже загружены, к ним есть доступ, но эта строка кода вызова отдельного метода уже не приводит к возникновению событий. А строка загрузки модели не содержит какой-либо метод, т.к. грузит все методы. В результате из своего кода ни в роуте ни в другой переменной мы не можем получить метод который вызывает событие, т.к. метод модели событие не вызывает, а в роуте для модели метод не прописывается. Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
arni Опубліковано: 17 квітня 2017 Share Опубліковано: 17 квітня 2017 (змінено) Так нагляднее: Получаем модель в контроллере: $this->load->model('checkout/order'); роут у нас получится checkout/order. Это не метод, который вызывает событие, а только класс. При получении модели, методы не указываются в роуте! К моменту выполнения следующей строки кода в классе модели, событие уже прошло (и то что перед и то что после) Открываем файл самой модели catalog\model\checkout\order.php - там несколько методов. Далее в контроллере вызов одного такого метода (getOrder) данной модели: $order_info = $this->model_checkout_order->getOrder($order_id); как видите, методы уже загружены, к ним есть доступ, но эта строка кода вызова отдельного метода уже не приводит к возникновению событий. А строка загрузки модели не содержит какой-либо метод, т.к. грузит все методы. В результате из своего кода ни в роуте ни в другой переменной мы не можем получить метод который вызывает событие, т.к. метод модели событие не вызывает, а в роуте для модели метод не прописывается. Змінено 17 квітня 2017 користувачем arni Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts