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

[Решено] Можно ли как-то средствами Oc определить какой контроллер вызывает модель?


cha0s

Recommended Posts

Например ситуация, в админки методы доставок вызываются из catalog/model/shipping, и из frontend тоже от туда, можно ли как-то отловить какой контроллер вызывает модель? из админки или из фронта? у меня кроме как вместе с функцией передавать еще дополнительный параметр идей нету, но может как-то сам Opencart знает что его вызывает?

 

П.С получается так что мне надо чтоб сама модель знала кто ее запрашивает :)

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


из админки или из фронта?

 

Если на стороне покупателя то из фронта, если в админке то из админки. Все просто. Рассматривайте админку и магазин как два разных сайта с общей базой, файлами и вспомогательными библиотеками

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

Смотрите:

 

один X контроллер вызывает 

$this->load->model('shipping/test');

 

другой Y контроллер вызывает

$this->load->model('shipping/test');

 

Вопрос, как узнать модели какой контроллер ее вызывает X или Y?

 

 

Это будет самое точное определение что мне требуется  :-)

 

пусть даже оба контроллера находятся в catalog, или через admin используется ajax типа $.ajax({

     url: 'index.php?route=sale/order/api&token=xxx&api=api/shipping/methods' сам факт остается неизменным, модель знает кто ее вызывает(какой контроллер) или нет?

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


ага. что бы получить список товаров из контроллера категорий или например из контроллера поиска нужно каждый раз создавать новую модель. это будет ИДЕАЛЬНО

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

Буду разбираться по стеку вызовов) 

 

В идеале - использовать разные модели или разные методы одной модели. Или debug_backtrace, если хочется поизвращаться.

 

мне не подойдет использовать разные модели, объясню почему примером

$results = $this->model_extension_extension->getExtensions('shipping');

    foreach ($results as $result) {
     if ($this->config->get($result['code'] . '_status')) {
      $this->load->model('shipping/' . $result['code']);

 

 

такая конструкция много где используется где надо подгрузить все методы доставок, и что я там буду клипать if оттуда то другая $this->load->model, да я запарюсь, у меня model будет иметь 2 return, для одного случая и для другого все... но чтоб этот return работал мне надо знать что вызывает эту model и от сюда я выдам return работы model ;D насчет debug_backtrace спс смотрю)

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


разные модели - полный бред

            $stacktrace = debug_backtrace();
            $node = $stacktrace[1];
            echo $node['file'] . "(" . $node['line'] . "): " . $node['class'] . $node['type'] . $node['function'] . "('" . implode(', ', $node['args']) . "')<br/>";
  • +1 1
Надіслати
Поділитися на інших сайтах

данный метод с debug_backtrace(); не работает на Opencart 2.2.0.0 только на Opencart до 2.1.0.2(и включительно), на последней версии стек не содержит класс вызывающего контроллера, нету в стеке индекса 'class' вообще, есть какие-то идеи? почему так происходит? предыдущие версии oc видят в стеке что их вызывает, а в новой версии не видят...

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


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

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

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

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

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

Вхід

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

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

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

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

Important Information

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