Opencart 2.3.x как адаптировать модули?

Вроде и сложного нет, передвинь модуль в экстеншн, так нет. Не работает
 
как работает контролер в Opencart 2 на front-end система сама автоматом подхватывает расширение / файлы контролера как в админке или нужно указывать.
 
как работает контролер в Opencart 2 на front-end система сама автоматом подхватывает расширение / файлы контролера как в админке или нужно указывать.
Не совсем понимаю вопрос, тебя интересует расширение .tpl, если да, то его не нужно

в методе view $output = $template->render($route . '.tpl');
Код:
    public function view($route, $data = array()) {
        $output = null;
       
        // Sanitize the call
        $route = preg_replace('/[^a-zA-Z0-9_\/]/', '', (string)$route);
       
        // Trigger the pre events
        $result = $this->registry->get('event')->trigger('view/' . $route . '/before', array(&$route, &$data, &$output));
       
        if ($result) {
            return $result;
        }
       
        if (!$output) {
            $template = new Template($this->registry->get('config')->get('template_type'));
           
            foreach ($data as $key => $value) {
                $template->set($key, $value);
            }
       
            $output = $template->render($route . '.tpl');
        }
       
        // Trigger the post events
        $result = $this->registry->get('event')->trigger('view/' . $route . '/after', array(&$route, &$data, &$output));
       
        if ($result) {
            return $result;
        }
       
        return $output;
    }
 
как работает контролер в Opencart 2 на front-end система сама автоматом подхватывает расширение / файлы контролера как в админке или нужно указывать.
Если расширение самого файла php, тогда его не надо

смотри код екшена, я думаю все поймешь, если что пиши, помогу

$file = DIR_APPLICATION . 'controller/' . implode('/', $parts) . '.php';

Код:
    public function __construct($route) {
        $this->id = $route;
       
        $parts = explode('/', preg_replace('/[^a-zA-Z0-9_\/]/', '', (string)$route));

        // Break apart the route
        while ($parts) {
            $file = DIR_APPLICATION . 'controller/' . implode('/', $parts) . '.php';

            if (is_file($file)) {
                $this->route = implode('/', $parts);       
               
                break;
            } else {
                $this->method = array_pop($parts);
            }
        }
    }
 
Я имел ввиду что когда пишем адрес какой-то страницы например главная информация и т.д. то соответственно выдает запрошенную страницу, там в структуре файлов все ясно. А если например вкинуть в контролер рядом с станицей информации файлик mystr.php или просто скопировать информационную только одну букву изменить и соответственно вид сделать и модель если нужно то не выдаст станицу напишет нет такого.
 
Не понятно какой адрес, почему не дать пример, может у тебя какой-то модуль для формирования урлов стоит

Изменить только одну букву в названии будет недостаточно, тебе нужно изменить название самого класса согласно пути его размещения

к примеру

файл catalog/controller/extension/feed/google_sitemap.php
Код:
<?php
class ControllerExtensionFeedGoogleSitemap extends Controller {

если ты хочешь добавить свой контроллер my_controller.php в папке catalog/controller/my_folder/super_mega_controller/my_controller.php

то клас должен быть таким
Код:
<?php
class ControllerMyFolderSuperMegaControllerMyController extends Controller {

Загрузка модели будет таким образом
$this->load->model('my_folder/super_mega_controller/my_controller.php');

Возьми и сравни два контролера, модели, сравни код, посмотри на их пути и все станет на свои места
 
Вот что нашел сегодня по этому поводу:
Если после установки модуля Opencart 2 или ocmod Opencart 2 вы видите сообщение "Доступ запрещен! У Вас нет прав для доступа к этой странице. Если она Вам нужна, обратитесь к администратору." - не спешите огорчаться. Вам всего лишь нужно дать права администраторам на управление модулем.

Решение ошибки:
1. В админке Opencart 2 переходим в Система > Пользователи > Группы пользователей > Администраторы и нажимаем кнопку Редактировать
2. В появившемся окне нажимаем "Выделить все" ниже обоих блоков, затем Сохраняем.

Что делать, если по инструкции выше не получается решить ошибку:
1. Такая проблема возможна, когда у вас Opencart 2.3, а вы ставите модуль для старых версий, то есть модуль не совместим с вашей версией Opencart. После установки модуля идет перенаправление на "route=extension/module", а должно идти на "route=extension/extension", вот вы и получаете ошибку "Доступ запрещен".
В Opencart 2.3 структура модулей существенно поменялась по сравнению с предыдущими версиями. Теперь папка module находиться в папке extension, а значит нужно перемещать все файлы модуля и править целую цепочку путей и обращений у функциям. Для решения ошибки при установке модуля по часте "доступа" вам нужно добавить права для модуля "extension/module/module_name" (можно через базу данных - читайте ниже)

А также править контроллер админки модуля - в файле admin/controller/extension/module/module_name.php
найти примерно такую строку:
$this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], true));
и заменить на это
$this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'], true));

2. Иногда бывают проблемы с сохранением добавленных прав через работу некоторых модулей. В таком случае можно добавить их вручную в таблицу `oc_user_group`, но если вы не разбираетесь, то лучше туда не лезь, потому что там данные храняться в массивах и если не правильно отредактировать - настройки прав слетят. Можно добавлять права через запятую, по примеру с другими записями.
 
Вот что нашел сегодня по этому поводу:
Вот такую бы полную инструкцию по изменениям в OpenCart 2.1 и OpenCart2.3. Поделитесь если кому-то попадалась или если для себя кто-то делал. А то с этими новыми OpenCart-ами одни проблемы при установке модулей и шаблонов.
 
Всё не так уж сложно. Берёте WinMerge (прогуглите, он бесплатный) и сравните файлы модуля (в controller, model, view) в разных версиях ОС. language также не забудьте. Сравните структуру баз. Модуль берите какой либо стандартный встроеный модуль, желательно поменше. Если знакомы с ПХП, то станет понятно, если не, то часто срабатывает метод обезьяны, научившейся гуглить.
И не забудьте, что модули в 2.2, 2.3 вынесены в extension, так что смотрите, что и куда копируете
 
В принципе особо ничего сложного нет. Вот мануал:

1. Необходимо добавить прослойки в виде каталога "extension". Необходимо удлинять пути и, соответственно, корректировать код (после чего его повторно с нуля проверять). И это касается не только контроллеров, но и моделей, и перевода, и вьюх. Далее из их документации.

Касаемо расположения. Что было:

admin/controller/module/xxx.php
admin/model/module/xxx.php
admin/language/en-gb/module/xxx.php
admin/view/template/module/xxx.tpl

Как теперь:

admin/controller/extension/module/xxx.php
admin/model/extension/module/xxx.php
admin/language/en-gb/extension/module/xxx.php
admin/view/template/extension/module/xxx.tpl

Касаемо имен контроллеров и моделей, теперь необходимо добавлять Extension. Чтобы из ControllerModuleMyModule получилось ControllerExtensionModuleMyModule, а из ModelModuleMyModule стало ModelExtensionModuleMyModule. То самое ограничение в именах классов.

Касаемо подключения моделей, теперь необходимо добавлять приставку "extension/", например, $this->load->model('extension/module/MyModule'). Это так же отражается и на создании динамических переменных объектов класса. Т.е. вместо model_module_MyModule, теперь нужно использовать model_extension_module_MyModule.

Этот пункт касается не только административной части "admin", но и основной части, т.е. каталога "catalog".

2. Теперь summernote необходимо подключать отдельно. Справиться с этой задачей достаточно легко. Просто добавить подключение необходимых скриптов:

$this->document->addStyle('view/javascript/summernote/summernote.css');
$this->document->addScript('view/javascript/summernote/summernote.min.js');
$this->document->addScript('view/javascript/summernote/opencart.js');

3. Модификация левого меню в админке. Теперь, меню в админке располагается не по адресам "controller/common/menu.php" и "view/template/common/menu.tpl", а в "controller/common/column_left.php" и "view/template/common/column_left.tpl". Стоит отметить, что меню теперь строится динамически в шаблоне по данным контроллера, т.е. не просто представлено в виде перечисления тегов ul-li. Так что тем, кто делал ручные правки и вставки в шаблон, придется его отложить и внимательно изучить контроллер, а именно структуру отдельных записей меню.

Конечно, есть и другие моменты, но это, пожалуй, одни из тех, с которыми сталкивается практически каждый модуль.
 
Назад
Сверху