Загрузка модели каталога из админского контроллера в opencart
На самом деле такое сделать без грязных хаков нельзя. Но можно пойти другим путём. Эта необходимость возникает, если нет желания дублировать и поддерживать код, который должен и с админской стороны и с фронтэнда отрабатывать. В opencart же загрузка моделей зависит от контекста, в котором происходит исполнение и $this->load->model(‘checkout/order’); в одном случае загрузит модель, в другом выдаст ошибку. Чтобы не дублировать код его нужно вынести в библиотеку, которая при необходимости будет проксировать запросы к ядерным моделям, в зависимости от контекста.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?php class MyLib { protected $registry; public function __construct($registry) { $this->registry = $registry; } public function __get($key) { return $this->registry->get($key); } public function __set($key, $value) { $this->registry->set($key, $value); } private function getType() { return basename(DIR_APPLICATION); } //пример проксирования private function getOrder($order_id){ if($this->getType() == 'admin') { $this->load->model('sale/order'); return $this->model_sale_order->getOrder($order_id); } else { $this->load->model('checkout/order'); return $this->model_checkout_order->getOrder($order_id); } } |
Минус такого метода – обе модели всё же придётся делать. Но только для загрузки и вызова методов библиотеки.
1 2 3 | <?php $this->load->library('mylib'); $mylib = new MyLib($this->registry); |