freelancer Опубліковано: 15 липня 2017 Share Опубліковано: 15 липня 2017 суть проблемы: в версии 2.3 автор Opencart решил перенести папки /module в /extension. в связи с чем разработчикам модулей приходится под версию 2.3 не только создавать новый архив с новыми путями, но и переписывать код, который эти пути учитывает но ведь хочется поддерживать 1 модуль, а не два, потому я решил подумать как можно сохранить один архив, но заставить модуль работать на всей ветке 2.x покажу на примере своего модуля seogen, чье название будет встреться по тексту в архив, либо отдельно нужно будет добавить два файла admin\controller\extension\module\seogen\install.php admin\controller\extension\module\seogen\uninstall.php первый с таким содержимым <?php class ControllerExtensionModuleSeogenInstall extends Controller { public function index() { $this->install(); } private function install() { $this->load->model('extension/event'); $this->model_extension_event->addEvent('seogen', 'admin/model/user/user_group/editUserGroup/after', 'module/seogen/eventSetPermissions_23'); $this->session->data['success'] = $this->language->get('text_install_success'); } } второй с таким <?php class ControllerExtensionModuleSeogenUninstall extends Controller { public function index() { $this->uninstall(); } private function uninstall() { $this->load->model('extension/event'); $this->model_extension_event->deleteEvent('seogen'); } } в код вашего родного контроллера такой метод public function eventSetPermissions_23($route, $arr){ if($this->validate()) { $this->load->model('user/user_group'); $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/module/seogen'); $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/module/seogen'); } } 4 Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 20 липня 2017 Share Опубліковано: 20 липня 2017 Я проще сделал Такой же файл в \admin\controller\extension\module\ В нем <?php /* All rights reserved belong to the module, the module developers http://opencartadmin.com */ // http://opencartadmin.com © 2011-2017 All Rights Reserved // Distribution, without the author's consent is prohibited // Commercial license if (!class_exists('ControllerExtensionModuleBlog')) { class ControllerExtensionModuleBlog extends Controller { private $error = array(); public function index() { $this->control('module/blog'); $this->controller_module_blog->index($this->registry); } public function uninstall() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->uninstall($this->registry); } } public function install() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->install($this->registry); } } protected function validate() { if (!$this->user->hasPermission('modify', 'extension/module/blog')) { $this->error['warning'] = $this->language->get('error_permission'); } return !$this->error; } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } } И все 2 Надіслати Поділитися на інших сайтах More sharing options... sitecreator Опубліковано: 27 липня 2017 Share Опубліковано: 27 липня 2017 Идея использовать один контроллер для разных версий хорошая. 2.1: $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')); 2.3: $this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'], 'SSL')); нужно не забыть про эти строчки. иначе получим сообщение "у вас нет прав..." в случае нажатия на кнопку "сохранить" во 2.3 версии. Ну и в хлебных крошках должны быть разные ссылки еще. Иначе тоже самое сообщение "у вас нет прав..." если кликнуть на хб. крошки "модули". Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 3 серпня 2017 Автор Share Опубліковано: 3 серпня 2017 sitecreator, да, все ссылки разумеется нужно переделать как на примере if (version_compare(VERSION, "2.3", ">=")) { $this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true)); } else { $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')); } Надіслати Поділитися на інших сайтах More sharing options... sitecreator Опубліковано: 3 серпня 2017 Share Опубліковано: 3 серпня 2017 (змінено) 25 минут назад, freelancer сказал: sitecreator, да, все ссылки разумеется нужно переделать как на примере я у себя, правда, не стал полагаться на константу VERSION Посчитал, что это не 100% надежно. Я решил просто проверить если существуют права у пользователя к extension/extension то это 2.3+ если нет таких прав, то это, соответственно, версия ниже. Поскольку в более ранних версиях не существовало extension/extension прав. Но с другой стороны, у пользователя могут быть права только к модулю, а к extension/extension может и не быть прав на 2.3 версии. Ну тогда ему и нужды нет возвращаться в список модулей. Он в любом случае получит "доступ запрещен" на 2.3, хоть к extension/extension обратится, хоть к extension/module. Потому и решил, что способ вроде как универсальный. Ну и про кнопочки нужно тоже не забыть (кнопочка возврата и др. если есть) Змінено 3 серпня 2017 користувачем sitecreator Надіслати Поділитися на інших сайтах More sharing options... 3 years later... magzhan9292 Опубліковано: 18 лютого 2021 Share Опубліковано: 18 лютого 2021 В 20.07.2017 в 13:38, markimax сказал: Я проще сделал Такой же файл в \admin\controller\extension\module\ В нем <?php /* All rights reserved belong to the module, the module developers http://opencartadmin.com */ // http://opencartadmin.com © 2011-2017 All Rights Reserved // Distribution, without the author's consent is prohibited // Commercial license if (!class_exists('ControllerExtensionModuleBlog')) { class ControllerExtensionModuleBlog extends Controller { private $error = array(); public function index() { $this->control('module/blog'); $this->controller_module_blog->index($this->registry); } public function uninstall() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->uninstall($this->registry); } } public function install() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->install($this->registry); } } protected function validate() { if (!$this->user->hasPermission('modify', 'extension/module/blog')) { $this->error['warning'] = $this->language->get('error_permission'); } return !$this->error; } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } } И все Как Вы смотрите на такую реализацию? <?php class ControllerModuleNoticeupSeo extends Controller { function __call($name, $arguments) { $this->control('extension/module/noticeup_seo'); if (method_exists(ControllerExtensionModuleNoticeupSeo::class, $name)) { $this->controller_extension_module_noticeup_seo->{$name}($this->registry); } } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація мои мысли как не переписывать свой модуль для версии 2.0-2.2 под версию 2.3 Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
markimax Опубліковано: 20 липня 2017 Share Опубліковано: 20 липня 2017 Я проще сделал Такой же файл в \admin\controller\extension\module\ В нем <?php /* All rights reserved belong to the module, the module developers http://opencartadmin.com */ // http://opencartadmin.com © 2011-2017 All Rights Reserved // Distribution, without the author's consent is prohibited // Commercial license if (!class_exists('ControllerExtensionModuleBlog')) { class ControllerExtensionModuleBlog extends Controller { private $error = array(); public function index() { $this->control('module/blog'); $this->controller_module_blog->index($this->registry); } public function uninstall() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->uninstall($this->registry); } } public function install() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->install($this->registry); } } protected function validate() { if (!$this->user->hasPermission('modify', 'extension/module/blog')) { $this->error['warning'] = $this->language->get('error_permission'); } return !$this->error; } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } } И все 2 Надіслати Поділитися на інших сайтах More sharing options... sitecreator Опубліковано: 27 липня 2017 Share Опубліковано: 27 липня 2017 Идея использовать один контроллер для разных версий хорошая. 2.1: $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')); 2.3: $this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'], 'SSL')); нужно не забыть про эти строчки. иначе получим сообщение "у вас нет прав..." в случае нажатия на кнопку "сохранить" во 2.3 версии. Ну и в хлебных крошках должны быть разные ссылки еще. Иначе тоже самое сообщение "у вас нет прав..." если кликнуть на хб. крошки "модули". Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 3 серпня 2017 Автор Share Опубліковано: 3 серпня 2017 sitecreator, да, все ссылки разумеется нужно переделать как на примере if (version_compare(VERSION, "2.3", ">=")) { $this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true)); } else { $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')); } Надіслати Поділитися на інших сайтах More sharing options... sitecreator Опубліковано: 3 серпня 2017 Share Опубліковано: 3 серпня 2017 (змінено) 25 минут назад, freelancer сказал: sitecreator, да, все ссылки разумеется нужно переделать как на примере я у себя, правда, не стал полагаться на константу VERSION Посчитал, что это не 100% надежно. Я решил просто проверить если существуют права у пользователя к extension/extension то это 2.3+ если нет таких прав, то это, соответственно, версия ниже. Поскольку в более ранних версиях не существовало extension/extension прав. Но с другой стороны, у пользователя могут быть права только к модулю, а к extension/extension может и не быть прав на 2.3 версии. Ну тогда ему и нужды нет возвращаться в список модулей. Он в любом случае получит "доступ запрещен" на 2.3, хоть к extension/extension обратится, хоть к extension/module. Потому и решил, что способ вроде как универсальный. Ну и про кнопочки нужно тоже не забыть (кнопочка возврата и др. если есть) Змінено 3 серпня 2017 користувачем sitecreator Надіслати Поділитися на інших сайтах More sharing options... 3 years later... magzhan9292 Опубліковано: 18 лютого 2021 Share Опубліковано: 18 лютого 2021 В 20.07.2017 в 13:38, markimax сказал: Я проще сделал Такой же файл в \admin\controller\extension\module\ В нем <?php /* All rights reserved belong to the module, the module developers http://opencartadmin.com */ // http://opencartadmin.com © 2011-2017 All Rights Reserved // Distribution, without the author's consent is prohibited // Commercial license if (!class_exists('ControllerExtensionModuleBlog')) { class ControllerExtensionModuleBlog extends Controller { private $error = array(); public function index() { $this->control('module/blog'); $this->controller_module_blog->index($this->registry); } public function uninstall() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->uninstall($this->registry); } } public function install() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->install($this->registry); } } protected function validate() { if (!$this->user->hasPermission('modify', 'extension/module/blog')) { $this->error['warning'] = $this->language->get('error_permission'); } return !$this->error; } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } } И все Как Вы смотрите на такую реализацию? <?php class ControllerModuleNoticeupSeo extends Controller { function __call($name, $arguments) { $this->control('extension/module/noticeup_seo'); if (method_exists(ControllerExtensionModuleNoticeupSeo::class, $name)) { $this->controller_extension_module_noticeup_seo->{$name}($this->registry); } } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація мои мысли как не переписывать свой модуль для версии 2.0-2.2 под версию 2.3 Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
sitecreator Опубліковано: 27 липня 2017 Share Опубліковано: 27 липня 2017 Идея использовать один контроллер для разных версий хорошая. 2.1: $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')); 2.3: $this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'], 'SSL')); нужно не забыть про эти строчки. иначе получим сообщение "у вас нет прав..." в случае нажатия на кнопку "сохранить" во 2.3 версии. Ну и в хлебных крошках должны быть разные ссылки еще. Иначе тоже самое сообщение "у вас нет прав..." если кликнуть на хб. крошки "модули". Надіслати Поділитися на інших сайтах More sharing options... freelancer Опубліковано: 3 серпня 2017 Автор Share Опубліковано: 3 серпня 2017 sitecreator, да, все ссылки разумеется нужно переделать как на примере if (version_compare(VERSION, "2.3", ">=")) { $this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true)); } else { $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')); } Надіслати Поділитися на інших сайтах More sharing options... sitecreator Опубліковано: 3 серпня 2017 Share Опубліковано: 3 серпня 2017 (змінено) 25 минут назад, freelancer сказал: sitecreator, да, все ссылки разумеется нужно переделать как на примере я у себя, правда, не стал полагаться на константу VERSION Посчитал, что это не 100% надежно. Я решил просто проверить если существуют права у пользователя к extension/extension то это 2.3+ если нет таких прав, то это, соответственно, версия ниже. Поскольку в более ранних версиях не существовало extension/extension прав. Но с другой стороны, у пользователя могут быть права только к модулю, а к extension/extension может и не быть прав на 2.3 версии. Ну тогда ему и нужды нет возвращаться в список модулей. Он в любом случае получит "доступ запрещен" на 2.3, хоть к extension/extension обратится, хоть к extension/module. Потому и решил, что способ вроде как универсальный. Ну и про кнопочки нужно тоже не забыть (кнопочка возврата и др. если есть) Змінено 3 серпня 2017 користувачем sitecreator Надіслати Поділитися на інших сайтах More sharing options... 3 years later... magzhan9292 Опубліковано: 18 лютого 2021 Share Опубліковано: 18 лютого 2021 В 20.07.2017 в 13:38, markimax сказал: Я проще сделал Такой же файл в \admin\controller\extension\module\ В нем <?php /* All rights reserved belong to the module, the module developers http://opencartadmin.com */ // http://opencartadmin.com © 2011-2017 All Rights Reserved // Distribution, without the author's consent is prohibited // Commercial license if (!class_exists('ControllerExtensionModuleBlog')) { class ControllerExtensionModuleBlog extends Controller { private $error = array(); public function index() { $this->control('module/blog'); $this->controller_module_blog->index($this->registry); } public function uninstall() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->uninstall($this->registry); } } public function install() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->install($this->registry); } } protected function validate() { if (!$this->user->hasPermission('modify', 'extension/module/blog')) { $this->error['warning'] = $this->language->get('error_permission'); } return !$this->error; } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } } И все Как Вы смотрите на такую реализацию? <?php class ControllerModuleNoticeupSeo extends Controller { function __call($name, $arguments) { $this->control('extension/module/noticeup_seo'); if (method_exists(ControllerExtensionModuleNoticeupSeo::class, $name)) { $this->controller_extension_module_noticeup_seo->{$name}($this->registry); } } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація мои мысли как не переписывать свой модуль для версии 2.0-2.2 под версию 2.3 Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
freelancer Опубліковано: 3 серпня 2017 Автор Share Опубліковано: 3 серпня 2017 sitecreator, да, все ссылки разумеется нужно переделать как на примере if (version_compare(VERSION, "2.3", ">=")) { $this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true)); } else { $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')); } Надіслати Поділитися на інших сайтах More sharing options... sitecreator Опубліковано: 3 серпня 2017 Share Опубліковано: 3 серпня 2017 (змінено) 25 минут назад, freelancer сказал: sitecreator, да, все ссылки разумеется нужно переделать как на примере я у себя, правда, не стал полагаться на константу VERSION Посчитал, что это не 100% надежно. Я решил просто проверить если существуют права у пользователя к extension/extension то это 2.3+ если нет таких прав, то это, соответственно, версия ниже. Поскольку в более ранних версиях не существовало extension/extension прав. Но с другой стороны, у пользователя могут быть права только к модулю, а к extension/extension может и не быть прав на 2.3 версии. Ну тогда ему и нужды нет возвращаться в список модулей. Он в любом случае получит "доступ запрещен" на 2.3, хоть к extension/extension обратится, хоть к extension/module. Потому и решил, что способ вроде как универсальный. Ну и про кнопочки нужно тоже не забыть (кнопочка возврата и др. если есть) Змінено 3 серпня 2017 користувачем sitecreator Надіслати Поділитися на інших сайтах More sharing options... 3 years later... magzhan9292 Опубліковано: 18 лютого 2021 Share Опубліковано: 18 лютого 2021 В 20.07.2017 в 13:38, markimax сказал: Я проще сделал Такой же файл в \admin\controller\extension\module\ В нем <?php /* All rights reserved belong to the module, the module developers http://opencartadmin.com */ // http://opencartadmin.com © 2011-2017 All Rights Reserved // Distribution, without the author's consent is prohibited // Commercial license if (!class_exists('ControllerExtensionModuleBlog')) { class ControllerExtensionModuleBlog extends Controller { private $error = array(); public function index() { $this->control('module/blog'); $this->controller_module_blog->index($this->registry); } public function uninstall() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->uninstall($this->registry); } } public function install() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->install($this->registry); } } protected function validate() { if (!$this->user->hasPermission('modify', 'extension/module/blog')) { $this->error['warning'] = $this->language->get('error_permission'); } return !$this->error; } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } } И все Как Вы смотрите на такую реализацию? <?php class ControllerModuleNoticeupSeo extends Controller { function __call($name, $arguments) { $this->control('extension/module/noticeup_seo'); if (method_exists(ControllerExtensionModuleNoticeupSeo::class, $name)) { $this->controller_extension_module_noticeup_seo->{$name}($this->registry); } } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Налаштування та оптимізація мои мысли как не переписывать свой модуль для версии 2.0-2.2 под версию 2.3
sitecreator Опубліковано: 3 серпня 2017 Share Опубліковано: 3 серпня 2017 (змінено) 25 минут назад, freelancer сказал: sitecreator, да, все ссылки разумеется нужно переделать как на примере я у себя, правда, не стал полагаться на константу VERSION Посчитал, что это не 100% надежно. Я решил просто проверить если существуют права у пользователя к extension/extension то это 2.3+ если нет таких прав, то это, соответственно, версия ниже. Поскольку в более ранних версиях не существовало extension/extension прав. Но с другой стороны, у пользователя могут быть права только к модулю, а к extension/extension может и не быть прав на 2.3 версии. Ну тогда ему и нужды нет возвращаться в список модулей. Он в любом случае получит "доступ запрещен" на 2.3, хоть к extension/extension обратится, хоть к extension/module. Потому и решил, что способ вроде как универсальный. Ну и про кнопочки нужно тоже не забыть (кнопочка возврата и др. если есть) Змінено 3 серпня 2017 користувачем sitecreator Надіслати Поділитися на інших сайтах More sharing options... 3 years later... magzhan9292 Опубліковано: 18 лютого 2021 Share Опубліковано: 18 лютого 2021 В 20.07.2017 в 13:38, markimax сказал: Я проще сделал Такой же файл в \admin\controller\extension\module\ В нем <?php /* All rights reserved belong to the module, the module developers http://opencartadmin.com */ // http://opencartadmin.com © 2011-2017 All Rights Reserved // Distribution, without the author's consent is prohibited // Commercial license if (!class_exists('ControllerExtensionModuleBlog')) { class ControllerExtensionModuleBlog extends Controller { private $error = array(); public function index() { $this->control('module/blog'); $this->controller_module_blog->index($this->registry); } public function uninstall() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->uninstall($this->registry); } } public function install() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->install($this->registry); } } protected function validate() { if (!$this->user->hasPermission('modify', 'extension/module/blog')) { $this->error['warning'] = $this->language->get('error_permission'); } return !$this->error; } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } } И все Как Вы смотрите на такую реализацию? <?php class ControllerModuleNoticeupSeo extends Controller { function __call($name, $arguments) { $this->control('extension/module/noticeup_seo'); if (method_exists(ControllerExtensionModuleNoticeupSeo::class, $name)) { $this->controller_extension_module_noticeup_seo->{$name}($this->registry); } } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
magzhan9292 Опубліковано: 18 лютого 2021 Share Опубліковано: 18 лютого 2021 В 20.07.2017 в 13:38, markimax сказал: Я проще сделал Такой же файл в \admin\controller\extension\module\ В нем <?php /* All rights reserved belong to the module, the module developers http://opencartadmin.com */ // http://opencartadmin.com © 2011-2017 All Rights Reserved // Distribution, without the author's consent is prohibited // Commercial license if (!class_exists('ControllerExtensionModuleBlog')) { class ControllerExtensionModuleBlog extends Controller { private $error = array(); public function index() { $this->control('module/blog'); $this->controller_module_blog->index($this->registry); } public function uninstall() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->uninstall($this->registry); } } public function install() { if ($this->validate()) { $this->control('module/blog'); $this->controller_module_blog->install($this->registry); } } protected function validate() { if (!$this->user->hasPermission('modify', 'extension/module/blog')) { $this->error['warning'] = $this->language->get('error_permission'); } return !$this->error; } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } } И все Как Вы смотрите на такую реализацию? <?php class ControllerModuleNoticeupSeo extends Controller { function __call($name, $arguments) { $this->control('extension/module/noticeup_seo'); if (method_exists(ControllerExtensionModuleNoticeupSeo::class, $name)) { $this->controller_extension_module_noticeup_seo->{$name}($this->registry); } } public function control($cont) { $file = DIR_APPLICATION . 'controller/' . $cont . '.php'; $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $cont); if (file_exists($file)) { include_once($file); $this->registry->set('controller_' . str_replace('/', '_', $cont), new $class($this->registry)); } else { trigger_error('Error: Could not load controller ' . $cont . '!'); exit(); } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
Recommended Posts