Перейти к содержанию
freelancer

мои мысли как не переписывать свой модуль для версии 2.0-2.2 под версию 2.3

Рекомендуемые сообщения

суть проблемы: в версии 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');
        }
    }

 

  • +1 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я проще сделал

Такой же файл в

\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();
            }
        }
     }
}

И все

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Идея использовать один контроллер для разных версий хорошая.

 

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 версии.

 

Ну и в хлебных крошках должны быть разные ссылки еще.  Иначе тоже самое сообщение "у вас нет прав..."  если кликнуть на хб. крошки "модули".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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'));
            }

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
25 минут назад, freelancer сказал:

sitecreator, да, все ссылки разумеется нужно переделать как на примере

 

я у себя, правда, не стал полагаться на константу

VERSION

 

Посчитал, что это не 100% надежно.

Я решил просто проверить если существуют права у пользователя к

extension/extension

то это 2.3+

если нет таких прав, то это, соответственно, версия ниже.  Поскольку в более ранних версиях не существовало extension/extension прав.

Но с другой стороны, у пользователя могут быть права только к модулю, а к extension/extension  может и не быть прав на 2.3 версии.  Ну тогда ему и нужды нет возвращаться в список модулей.

Он в любом случае получит "доступ запрещен" на 2.3, хоть к extension/extension обратится, хоть к extension/module. Потому и решил, что способ вроде как универсальный.

 

Ну и про кнопочки нужно тоже не забыть (кнопочка возврата и др. если есть)

Изменено пользователем sitecreator

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.