Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

мои мысли как не переписывать свой модуль для версии 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 2
Ссылка на комменирий
Погделиться на других сайих

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

 

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
Ссылка на комменирий
Погделиться на других сайих

  • 3 года спустя...
В 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();
        }
    }
}

 

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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

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

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