controll Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 Прошу не кидаться тапками. Читал не мало , понимаю что принципе невозможно, но сложилась ситуация, очень нужно получить данные из контроллера админ части в контроллер каталога. Есть какой то костыль или какой то способ это сделать? версия 3.0.2 окстор. Подскажите варианты плиз, перечитал немало когда то во второй версии был случай , такое делалось . В третьей перебрал всю церочку работы движка, насколько понимаю, не получается у меня. (( Надіслати Поділитися на інших сайтах More sharing options...
Prooksius Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 Так а что конкретно нужно получить? Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 20 лютого 2021 Автор Share Опубліковано: 20 лютого 2021 вызвать метод контроллера из админки в контроллере каталога))))) Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 Можете установить расширение runkit чтобы можно было переопределять константу DIR_APPLICATION Потом до вызова контроллера изменяете admin на catalog и после вызова восстанавливаете. Если нету возможности установки runkit тогда нужно менять код и делать возможность загрузки из каталога в system\engine\action.php system\engine\loader.php Чтобы можно было так: $this->load->controller('common/search', array(), 'catalog'); Надіслати Поділитися на інших сайтах More sharing options... Prooksius Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 может быть будет легче просто сделать нужную выборку из БД (добавить нужные функции из моделей админки в модели каталога, если нужно) и вывести что надо? Странное вообщето желание... Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 20 лютого 2021 Автор Share Опубліковано: 20 лютого 2021 14 минут назад, Prooksius сказал: может быть будет легче просто сделать нужную выборку из БД (добавить нужные функции из моделей админки в модели каталога, если нужно) и вывести что надо? Странное вообщето желание... Согласен, но там данные так запутанно достаются с бд , выборка замудренная с нескольких таблиц, чтобы сказать я асс в этом то нет. хочется просто вызвать и забыть)). 26 минут назад, buslikdrev сказал: Можете установить расширение runkit чтобы можно было переопределять константу DIR_APPLICATION Потом до вызова контроллера изменяете admin на catalog и после вызова восстанавливаете. Если нету возможности установки runkit тогда нужно менять код и делать возможность загрузки из каталога в system\engine\action.php system\engine\loader.php Чтобы можно было так: $this->load->controller('common/search', array(), 'catalog'); насчет runkit не слышал, спасибо попробую, второй способ оригинально, ) но ненастолько силен, чтобы одолеть. Как понимаю в лоадер передать третий параметр, но не могу понять где регистр переопределить с помощью этого параметра. Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 а не проще ли взять метод из контройлера админки и поставить в тот контройлер где он нужен, ну если возникнет проблема с моделью на админской стороне то создаем такую же модель в каталоге и в итоге получится что будете вызывать нужный метод в контройлере каталога Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 вы бы лучше написали что вам нужно получить со стороны админки, потому как может быть и не нужно будет придумывать велосипед Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 3 часа назад, controll сказал: не могу понять где регистр переопределить Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Вот такое решение написал, если кому-то нужно дёргать в свой модуль: Спойлер private function load_controller($route, $data = array(), $catalog = 'catalog') { $controller = null; if (is_file(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php')) { $template_directory = $this->registry->get('config')->get('template_directory'); if (is_file(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig')) { if (!is_dir(DIR_TEMPLATE . 'catalogs')) { mkdir(DIR_TEMPLATE . 'catalogs', 0755); } $new_route = ''; foreach (explode('/', str_replace('/' . basename($route), '', $route)) as $result) { $new_route .= '/'. $result; if (!is_dir(DIR_TEMPLATE . 'catalogs' . $new_route)) { mkdir(DIR_TEMPLATE . 'catalogs' . $new_route, 0755); } } copy(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig', DIR_TEMPLATE . 'catalogs/' . $route . '.twig'); } if (is_file(DIR_TEMPLATE . 'catalogs/' . $route . '.twig')) { $this->registry->get('config')->set('template_directory', 'catalogs/'); } include_once(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php'); $controller = new ControllerCommonSearch($this->registry); $controller = call_user_func_array(array($controller, 'index'), array($data)); $this->registry->get('config')->set('template_directory', $template_directory); } return $controller; } echo $this->load_controller('common/search', array()); 1 Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 7 часов назад, buslikdrev сказал: Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 (змінено) 19 минут назад, controll сказал: Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) UPD Написал, а после заметил ваш вариант. Я пошел немного другим путем action.php private $namespace = DIR_APPLICATION; public function __construct($route, $namespace = false) { $this->id = $route; switch ($namespace){ case 'admin': case 'catalog': $this->ns = DIR_PATH . $namespace . '/'; break; } ................................ public function execute($registry, array $args = array()) { // Stop any magical methods being called if (substr($this->method, 0, 2) == '__') { return new \Exception('Error: Calls to magic methods are not allowed!'); } $file = $this->namespace . 'controller/' . $this->route . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $this->route); ................................ в loader.php public function controller($route, $data = array(), $namespace = false) { // Sanitize the call $route = preg_replace('/[^a-zA-Z0-9_\/]/', '', (string)$route); // Keep the original trigger $trigger = $route; // Trigger the pre events $result = $this->registry->get('event')->trigger('controller/' . $trigger . '/before', array(&$route, &$data)); // Make sure its only the last event that returns an output if required. if ($result != null && !$result instanceof Exception) { $output = $result; } else { $action = new Action($route, $namespace); $output = $action->execute($this->registry, array(&$data)); } ........................................ и всё, можно вызвать везде при необходимости $this->load->controller('common/search', array(), 'catalog'); ну или любой другой. Третий параметр по желанию, остальному коду не мешает. PS в конфигах у меня всегда есть DIR_PATH на public_html , не знаю почему такого нет, мне всегда ее не хватает )))). Желательно это всё в ocmod Змінено 21 лютого 2021 користувачем controll Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Загальні питання Получить данные из контроллера в админкке в каталог Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
controll Опубліковано: 20 лютого 2021 Автор Share Опубліковано: 20 лютого 2021 вызвать метод контроллера из админки в контроллере каталога))))) Надіслати Поділитися на інших сайтах More sharing options...
buslikdrev Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 Можете установить расширение runkit чтобы можно было переопределять константу DIR_APPLICATION Потом до вызова контроллера изменяете admin на catalog и после вызова восстанавливаете. Если нету возможности установки runkit тогда нужно менять код и делать возможность загрузки из каталога в system\engine\action.php system\engine\loader.php Чтобы можно было так: $this->load->controller('common/search', array(), 'catalog'); Надіслати Поділитися на інших сайтах More sharing options... Prooksius Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 может быть будет легче просто сделать нужную выборку из БД (добавить нужные функции из моделей админки в модели каталога, если нужно) и вывести что надо? Странное вообщето желание... Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 20 лютого 2021 Автор Share Опубліковано: 20 лютого 2021 14 минут назад, Prooksius сказал: может быть будет легче просто сделать нужную выборку из БД (добавить нужные функции из моделей админки в модели каталога, если нужно) и вывести что надо? Странное вообщето желание... Согласен, но там данные так запутанно достаются с бд , выборка замудренная с нескольких таблиц, чтобы сказать я асс в этом то нет. хочется просто вызвать и забыть)). 26 минут назад, buslikdrev сказал: Можете установить расширение runkit чтобы можно было переопределять константу DIR_APPLICATION Потом до вызова контроллера изменяете admin на catalog и после вызова восстанавливаете. Если нету возможности установки runkit тогда нужно менять код и делать возможность загрузки из каталога в system\engine\action.php system\engine\loader.php Чтобы можно было так: $this->load->controller('common/search', array(), 'catalog'); насчет runkit не слышал, спасибо попробую, второй способ оригинально, ) но ненастолько силен, чтобы одолеть. Как понимаю в лоадер передать третий параметр, но не могу понять где регистр переопределить с помощью этого параметра. Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 а не проще ли взять метод из контройлера админки и поставить в тот контройлер где он нужен, ну если возникнет проблема с моделью на админской стороне то создаем такую же модель в каталоге и в итоге получится что будете вызывать нужный метод в контройлере каталога Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 вы бы лучше написали что вам нужно получить со стороны админки, потому как может быть и не нужно будет придумывать велосипед Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 3 часа назад, controll сказал: не могу понять где регистр переопределить Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Вот такое решение написал, если кому-то нужно дёргать в свой модуль: Спойлер private function load_controller($route, $data = array(), $catalog = 'catalog') { $controller = null; if (is_file(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php')) { $template_directory = $this->registry->get('config')->get('template_directory'); if (is_file(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig')) { if (!is_dir(DIR_TEMPLATE . 'catalogs')) { mkdir(DIR_TEMPLATE . 'catalogs', 0755); } $new_route = ''; foreach (explode('/', str_replace('/' . basename($route), '', $route)) as $result) { $new_route .= '/'. $result; if (!is_dir(DIR_TEMPLATE . 'catalogs' . $new_route)) { mkdir(DIR_TEMPLATE . 'catalogs' . $new_route, 0755); } } copy(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig', DIR_TEMPLATE . 'catalogs/' . $route . '.twig'); } if (is_file(DIR_TEMPLATE . 'catalogs/' . $route . '.twig')) { $this->registry->get('config')->set('template_directory', 'catalogs/'); } include_once(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php'); $controller = new ControllerCommonSearch($this->registry); $controller = call_user_func_array(array($controller, 'index'), array($data)); $this->registry->get('config')->set('template_directory', $template_directory); } return $controller; } echo $this->load_controller('common/search', array()); 1 Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 7 часов назад, buslikdrev сказал: Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 (змінено) 19 минут назад, controll сказал: Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) UPD Написал, а после заметил ваш вариант. Я пошел немного другим путем action.php private $namespace = DIR_APPLICATION; public function __construct($route, $namespace = false) { $this->id = $route; switch ($namespace){ case 'admin': case 'catalog': $this->ns = DIR_PATH . $namespace . '/'; break; } ................................ public function execute($registry, array $args = array()) { // Stop any magical methods being called if (substr($this->method, 0, 2) == '__') { return new \Exception('Error: Calls to magic methods are not allowed!'); } $file = $this->namespace . 'controller/' . $this->route . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $this->route); ................................ в loader.php public function controller($route, $data = array(), $namespace = false) { // Sanitize the call $route = preg_replace('/[^a-zA-Z0-9_\/]/', '', (string)$route); // Keep the original trigger $trigger = $route; // Trigger the pre events $result = $this->registry->get('event')->trigger('controller/' . $trigger . '/before', array(&$route, &$data)); // Make sure its only the last event that returns an output if required. if ($result != null && !$result instanceof Exception) { $output = $result; } else { $action = new Action($route, $namespace); $output = $action->execute($this->registry, array(&$data)); } ........................................ и всё, можно вызвать везде при необходимости $this->load->controller('common/search', array(), 'catalog'); ну или любой другой. Третий параметр по желанию, остальному коду не мешает. PS в конфигах у меня всегда есть DIR_PATH на public_html , не знаю почему такого нет, мне всегда ее не хватает )))). Желательно это всё в ocmod Змінено 21 лютого 2021 користувачем controll Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Загальні питання Получить данные из контроллера в админкке в каталог Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Prooksius Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 может быть будет легче просто сделать нужную выборку из БД (добавить нужные функции из моделей админки в модели каталога, если нужно) и вывести что надо? Странное вообщето желание... Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 20 лютого 2021 Автор Share Опубліковано: 20 лютого 2021 14 минут назад, Prooksius сказал: может быть будет легче просто сделать нужную выборку из БД (добавить нужные функции из моделей админки в модели каталога, если нужно) и вывести что надо? Странное вообщето желание... Согласен, но там данные так запутанно достаются с бд , выборка замудренная с нескольких таблиц, чтобы сказать я асс в этом то нет. хочется просто вызвать и забыть)). 26 минут назад, buslikdrev сказал: Можете установить расширение runkit чтобы можно было переопределять константу DIR_APPLICATION Потом до вызова контроллера изменяете admin на catalog и после вызова восстанавливаете. Если нету возможности установки runkit тогда нужно менять код и делать возможность загрузки из каталога в system\engine\action.php system\engine\loader.php Чтобы можно было так: $this->load->controller('common/search', array(), 'catalog'); насчет runkit не слышал, спасибо попробую, второй способ оригинально, ) но ненастолько силен, чтобы одолеть. Как понимаю в лоадер передать третий параметр, но не могу понять где регистр переопределить с помощью этого параметра. Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 а не проще ли взять метод из контройлера админки и поставить в тот контройлер где он нужен, ну если возникнет проблема с моделью на админской стороне то создаем такую же модель в каталоге и в итоге получится что будете вызывать нужный метод в контройлере каталога Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 вы бы лучше написали что вам нужно получить со стороны админки, потому как может быть и не нужно будет придумывать велосипед Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 3 часа назад, controll сказал: не могу понять где регистр переопределить Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Вот такое решение написал, если кому-то нужно дёргать в свой модуль: Спойлер private function load_controller($route, $data = array(), $catalog = 'catalog') { $controller = null; if (is_file(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php')) { $template_directory = $this->registry->get('config')->get('template_directory'); if (is_file(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig')) { if (!is_dir(DIR_TEMPLATE . 'catalogs')) { mkdir(DIR_TEMPLATE . 'catalogs', 0755); } $new_route = ''; foreach (explode('/', str_replace('/' . basename($route), '', $route)) as $result) { $new_route .= '/'. $result; if (!is_dir(DIR_TEMPLATE . 'catalogs' . $new_route)) { mkdir(DIR_TEMPLATE . 'catalogs' . $new_route, 0755); } } copy(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig', DIR_TEMPLATE . 'catalogs/' . $route . '.twig'); } if (is_file(DIR_TEMPLATE . 'catalogs/' . $route . '.twig')) { $this->registry->get('config')->set('template_directory', 'catalogs/'); } include_once(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php'); $controller = new ControllerCommonSearch($this->registry); $controller = call_user_func_array(array($controller, 'index'), array($data)); $this->registry->get('config')->set('template_directory', $template_directory); } return $controller; } echo $this->load_controller('common/search', array()); 1 Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 7 часов назад, buslikdrev сказал: Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 (змінено) 19 минут назад, controll сказал: Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) UPD Написал, а после заметил ваш вариант. Я пошел немного другим путем action.php private $namespace = DIR_APPLICATION; public function __construct($route, $namespace = false) { $this->id = $route; switch ($namespace){ case 'admin': case 'catalog': $this->ns = DIR_PATH . $namespace . '/'; break; } ................................ public function execute($registry, array $args = array()) { // Stop any magical methods being called if (substr($this->method, 0, 2) == '__') { return new \Exception('Error: Calls to magic methods are not allowed!'); } $file = $this->namespace . 'controller/' . $this->route . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $this->route); ................................ в loader.php public function controller($route, $data = array(), $namespace = false) { // Sanitize the call $route = preg_replace('/[^a-zA-Z0-9_\/]/', '', (string)$route); // Keep the original trigger $trigger = $route; // Trigger the pre events $result = $this->registry->get('event')->trigger('controller/' . $trigger . '/before', array(&$route, &$data)); // Make sure its only the last event that returns an output if required. if ($result != null && !$result instanceof Exception) { $output = $result; } else { $action = new Action($route, $namespace); $output = $action->execute($this->registry, array(&$data)); } ........................................ и всё, можно вызвать везде при необходимости $this->load->controller('common/search', array(), 'catalog'); ну или любой другой. Третий параметр по желанию, остальному коду не мешает. PS в конфигах у меня всегда есть DIR_PATH на public_html , не знаю почему такого нет, мне всегда ее не хватает )))). Желательно это всё в ocmod Змінено 21 лютого 2021 користувачем controll Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Загальні питання Получить данные из контроллера в админкке в каталог Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
controll Опубліковано: 20 лютого 2021 Автор Share Опубліковано: 20 лютого 2021 14 минут назад, Prooksius сказал: может быть будет легче просто сделать нужную выборку из БД (добавить нужные функции из моделей админки в модели каталога, если нужно) и вывести что надо? Странное вообщето желание... Согласен, но там данные так запутанно достаются с бд , выборка замудренная с нескольких таблиц, чтобы сказать я асс в этом то нет. хочется просто вызвать и забыть)). 26 минут назад, buslikdrev сказал: Можете установить расширение runkit чтобы можно было переопределять константу DIR_APPLICATION Потом до вызова контроллера изменяете admin на catalog и после вызова восстанавливаете. Если нету возможности установки runkit тогда нужно менять код и делать возможность загрузки из каталога в system\engine\action.php system\engine\loader.php Чтобы можно было так: $this->load->controller('common/search', array(), 'catalog'); насчет runkit не слышал, спасибо попробую, второй способ оригинально, ) но ненастолько силен, чтобы одолеть. Как понимаю в лоадер передать третий параметр, но не могу понять где регистр переопределить с помощью этого параметра. Надіслати Поділитися на інших сайтах More sharing options...
Venter Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 а не проще ли взять метод из контройлера админки и поставить в тот контройлер где он нужен, ну если возникнет проблема с моделью на админской стороне то создаем такую же модель в каталоге и в итоге получится что будете вызывать нужный метод в контройлере каталога Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 вы бы лучше написали что вам нужно получить со стороны админки, потому как может быть и не нужно будет придумывать велосипед Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 3 часа назад, controll сказал: не могу понять где регистр переопределить Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Вот такое решение написал, если кому-то нужно дёргать в свой модуль: Спойлер private function load_controller($route, $data = array(), $catalog = 'catalog') { $controller = null; if (is_file(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php')) { $template_directory = $this->registry->get('config')->get('template_directory'); if (is_file(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig')) { if (!is_dir(DIR_TEMPLATE . 'catalogs')) { mkdir(DIR_TEMPLATE . 'catalogs', 0755); } $new_route = ''; foreach (explode('/', str_replace('/' . basename($route), '', $route)) as $result) { $new_route .= '/'. $result; if (!is_dir(DIR_TEMPLATE . 'catalogs' . $new_route)) { mkdir(DIR_TEMPLATE . 'catalogs' . $new_route, 0755); } } copy(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig', DIR_TEMPLATE . 'catalogs/' . $route . '.twig'); } if (is_file(DIR_TEMPLATE . 'catalogs/' . $route . '.twig')) { $this->registry->get('config')->set('template_directory', 'catalogs/'); } include_once(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php'); $controller = new ControllerCommonSearch($this->registry); $controller = call_user_func_array(array($controller, 'index'), array($data)); $this->registry->get('config')->set('template_directory', $template_directory); } return $controller; } echo $this->load_controller('common/search', array()); 1 Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 7 часов назад, buslikdrev сказал: Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 (змінено) 19 минут назад, controll сказал: Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) UPD Написал, а после заметил ваш вариант. Я пошел немного другим путем action.php private $namespace = DIR_APPLICATION; public function __construct($route, $namespace = false) { $this->id = $route; switch ($namespace){ case 'admin': case 'catalog': $this->ns = DIR_PATH . $namespace . '/'; break; } ................................ public function execute($registry, array $args = array()) { // Stop any magical methods being called if (substr($this->method, 0, 2) == '__') { return new \Exception('Error: Calls to magic methods are not allowed!'); } $file = $this->namespace . 'controller/' . $this->route . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $this->route); ................................ в loader.php public function controller($route, $data = array(), $namespace = false) { // Sanitize the call $route = preg_replace('/[^a-zA-Z0-9_\/]/', '', (string)$route); // Keep the original trigger $trigger = $route; // Trigger the pre events $result = $this->registry->get('event')->trigger('controller/' . $trigger . '/before', array(&$route, &$data)); // Make sure its only the last event that returns an output if required. if ($result != null && !$result instanceof Exception) { $output = $result; } else { $action = new Action($route, $namespace); $output = $action->execute($this->registry, array(&$data)); } ........................................ и всё, можно вызвать везде при необходимости $this->load->controller('common/search', array(), 'catalog'); ну или любой другой. Третий параметр по желанию, остальному коду не мешает. PS в конфигах у меня всегда есть DIR_PATH на public_html , не знаю почему такого нет, мне всегда ее не хватает )))). Желательно это всё в ocmod Змінено 21 лютого 2021 користувачем controll Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Загальні питання Получить данные из контроллера в админкке в каталог
Venter Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 вы бы лучше написали что вам нужно получить со стороны админки, потому как может быть и не нужно будет придумывать велосипед Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 3 часа назад, controll сказал: не могу понять где регистр переопределить Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Вот такое решение написал, если кому-то нужно дёргать в свой модуль: Спойлер private function load_controller($route, $data = array(), $catalog = 'catalog') { $controller = null; if (is_file(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php')) { $template_directory = $this->registry->get('config')->get('template_directory'); if (is_file(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig')) { if (!is_dir(DIR_TEMPLATE . 'catalogs')) { mkdir(DIR_TEMPLATE . 'catalogs', 0755); } $new_route = ''; foreach (explode('/', str_replace('/' . basename($route), '', $route)) as $result) { $new_route .= '/'. $result; if (!is_dir(DIR_TEMPLATE . 'catalogs' . $new_route)) { mkdir(DIR_TEMPLATE . 'catalogs' . $new_route, 0755); } } copy(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig', DIR_TEMPLATE . 'catalogs/' . $route . '.twig'); } if (is_file(DIR_TEMPLATE . 'catalogs/' . $route . '.twig')) { $this->registry->get('config')->set('template_directory', 'catalogs/'); } include_once(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php'); $controller = new ControllerCommonSearch($this->registry); $controller = call_user_func_array(array($controller, 'index'), array($data)); $this->registry->get('config')->set('template_directory', $template_directory); } return $controller; } echo $this->load_controller('common/search', array()); 1 Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 7 часов назад, buslikdrev сказал: Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 (змінено) 19 минут назад, controll сказал: Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) UPD Написал, а после заметил ваш вариант. Я пошел немного другим путем action.php private $namespace = DIR_APPLICATION; public function __construct($route, $namespace = false) { $this->id = $route; switch ($namespace){ case 'admin': case 'catalog': $this->ns = DIR_PATH . $namespace . '/'; break; } ................................ public function execute($registry, array $args = array()) { // Stop any magical methods being called if (substr($this->method, 0, 2) == '__') { return new \Exception('Error: Calls to magic methods are not allowed!'); } $file = $this->namespace . 'controller/' . $this->route . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $this->route); ................................ в loader.php public function controller($route, $data = array(), $namespace = false) { // Sanitize the call $route = preg_replace('/[^a-zA-Z0-9_\/]/', '', (string)$route); // Keep the original trigger $trigger = $route; // Trigger the pre events $result = $this->registry->get('event')->trigger('controller/' . $trigger . '/before', array(&$route, &$data)); // Make sure its only the last event that returns an output if required. if ($result != null && !$result instanceof Exception) { $output = $result; } else { $action = new Action($route, $namespace); $output = $action->execute($this->registry, array(&$data)); } ........................................ и всё, можно вызвать везде при необходимости $this->load->controller('common/search', array(), 'catalog'); ну или любой другой. Третий параметр по желанию, остальному коду не мешает. PS в конфигах у меня всегда есть DIR_PATH на public_html , не знаю почему такого нет, мне всегда ее не хватает )))). Желательно это всё в ocmod Змінено 21 лютого 2021 користувачем controll Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
buslikdrev Опубліковано: 20 лютого 2021 Share Опубліковано: 20 лютого 2021 3 часа назад, controll сказал: не могу понять где регистр переопределить Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Вот такое решение написал, если кому-то нужно дёргать в свой модуль: Спойлер private function load_controller($route, $data = array(), $catalog = 'catalog') { $controller = null; if (is_file(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php')) { $template_directory = $this->registry->get('config')->get('template_directory'); if (is_file(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig')) { if (!is_dir(DIR_TEMPLATE . 'catalogs')) { mkdir(DIR_TEMPLATE . 'catalogs', 0755); } $new_route = ''; foreach (explode('/', str_replace('/' . basename($route), '', $route)) as $result) { $new_route .= '/'. $result; if (!is_dir(DIR_TEMPLATE . 'catalogs' . $new_route)) { mkdir(DIR_TEMPLATE . 'catalogs' . $new_route, 0755); } } copy(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig', DIR_TEMPLATE . 'catalogs/' . $route . '.twig'); } if (is_file(DIR_TEMPLATE . 'catalogs/' . $route . '.twig')) { $this->registry->get('config')->set('template_directory', 'catalogs/'); } include_once(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php'); $controller = new ControllerCommonSearch($this->registry); $controller = call_user_func_array(array($controller, 'index'), array($data)); $this->registry->get('config')->set('template_directory', $template_directory); } return $controller; } echo $this->load_controller('common/search', array()); 1 Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 7 часов назад, buslikdrev сказал: Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) Надіслати Поділитися на інших сайтах More sharing options... controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 (змінено) 19 минут назад, controll сказал: Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) UPD Написал, а после заметил ваш вариант. Я пошел немного другим путем action.php private $namespace = DIR_APPLICATION; public function __construct($route, $namespace = false) { $this->id = $route; switch ($namespace){ case 'admin': case 'catalog': $this->ns = DIR_PATH . $namespace . '/'; break; } ................................ public function execute($registry, array $args = array()) { // Stop any magical methods being called if (substr($this->method, 0, 2) == '__') { return new \Exception('Error: Calls to magic methods are not allowed!'); } $file = $this->namespace . 'controller/' . $this->route . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $this->route); ................................ в loader.php public function controller($route, $data = array(), $namespace = false) { // Sanitize the call $route = preg_replace('/[^a-zA-Z0-9_\/]/', '', (string)$route); // Keep the original trigger $trigger = $route; // Trigger the pre events $result = $this->registry->get('event')->trigger('controller/' . $trigger . '/before', array(&$route, &$data)); // Make sure its only the last event that returns an output if required. if ($result != null && !$result instanceof Exception) { $output = $result; } else { $action = new Action($route, $namespace); $output = $action->execute($this->registry, array(&$data)); } ........................................ и всё, можно вызвать везде при необходимости $this->load->controller('common/search', array(), 'catalog'); ну или любой другой. Третий параметр по желанию, остальному коду не мешает. PS в конфигах у меня всегда есть DIR_PATH на public_html , не знаю почему такого нет, мне всегда ее не хватает )))). Желательно это всё в ocmod Змінено 21 лютого 2021 користувачем controll Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 7 часов назад, buslikdrev сказал: Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там. Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) Надіслати Поділитися на інших сайтах More sharing options...
controll Опубліковано: 21 лютого 2021 Автор Share Опубліковано: 21 лютого 2021 (змінено) 19 минут назад, controll сказал: Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность )) UPD Написал, а после заметил ваш вариант. Я пошел немного другим путем action.php private $namespace = DIR_APPLICATION; public function __construct($route, $namespace = false) { $this->id = $route; switch ($namespace){ case 'admin': case 'catalog': $this->ns = DIR_PATH . $namespace . '/'; break; } ................................ public function execute($registry, array $args = array()) { // Stop any magical methods being called if (substr($this->method, 0, 2) == '__') { return new \Exception('Error: Calls to magic methods are not allowed!'); } $file = $this->namespace . 'controller/' . $this->route . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $this->route); ................................ в loader.php public function controller($route, $data = array(), $namespace = false) { // Sanitize the call $route = preg_replace('/[^a-zA-Z0-9_\/]/', '', (string)$route); // Keep the original trigger $trigger = $route; // Trigger the pre events $result = $this->registry->get('event')->trigger('controller/' . $trigger . '/before', array(&$route, &$data)); // Make sure its only the last event that returns an output if required. if ($result != null && !$result instanceof Exception) { $output = $result; } else { $action = new Action($route, $namespace); $output = $action->execute($this->registry, array(&$data)); } ........................................ и всё, можно вызвать везде при необходимости $this->load->controller('common/search', array(), 'catalog'); ну или любой другой. Третий параметр по желанию, остальному коду не мешает. PS в конфигах у меня всегда есть DIR_PATH на public_html , не знаю почему такого нет, мне всегда ее не хватает )))). Желательно это всё в ocmod Змінено 21 лютого 2021 користувачем controll Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts