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

Ravgus    0

Добрый день! Решил разобраться с тем как создаются модули на ocstore 2, но столкнулся с такой проблемой - мой модуль не отображается в админке в дополнениях. Вроде бы все сделал все что необходимо - создал контроллер, языковой файл, tpl как для админки так и для каталога, проверил на работоспособность через запрос:

 

http://localhost/OpenCart/index.php?route=myprice/price

все работает, необходимую инфу выдает, так что тут все вроде норм. Также добавлял в админке админу права на просмотр и редактирования модуля - ничего не изменило. Помогите люди добрые, я уже какой час над этим бьюсь. Прилаживаю файлы для админки.

Контроллер:

 

<?php
class ControllerMypricePrice extends Controller {
    private $error = array();

    public function index() {
        $this->load->language('myprice/price');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('setting/setting');

        if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
            $this->model_setting_setting->editSetting('price', $this->request->post);

            $this->session->data['success'] = $this->language->get('text_success');

            $this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'], true)); //
        }

        $data['heading_title'] = $this->language->get('heading_title');

        $data['text_edit'] = $this->language->get('text_edit');
        $data['text_enabled'] = $this->language->get('text_enabled');
        $data['text_disabled'] = $this->language->get('text_disabled');

        $data['entry_status'] = $this->language->get('entry_status');

        $data['button_save'] = $this->language->get('button_save');
        $data['button_cancel'] = $this->language->get('button_cancel');

        if (isset($this->error['warning'])) {
            $data['error_warning'] = $this->error['warning'];
        } else {
            $data['error_warning'] = '';
        }

        $data['breadcrumbs'] = array();

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_home'),
            'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], true)
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_extension'),
            'href' => $this->url->link('extension/extension', 'token=' . $this->session->data['token'], true) //
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('heading_title'),
            'href' => $this->url->link('myprice/price', 'token=' . $this->session->data['token'], true)
        );

        $data['action'] = $this->url->link('myprice/price', 'token=' . $this->session->data['token'], true);

        $data['cancel'] = $this->url->link('extension/extension', 'token=' . $this->session->data['token'], true); //

        if (isset($this->request->post['price_status'])) {
            $data['price_status'] = $this->request->post['price_status'];
        } else {
            $data['price_status'] = $this->config->get('price_status');
        }

        $data['header'] = $this->load->controller('common/header');
        $data['column_left'] = $this->load->controller('common/column_left');
        $data['footer'] = $this->load->controller('common/footer');

        $this->response->setOutput($this->load->view('myprice/price', $data));
    }

    protected function validate() {
        if (!$this->user->hasPermission('modify', 'myprice/price')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }

        return !$this->error;
    }
}

Lang:

<?php
// Heading
$_['heading_title']    = 'Мой модуль';

// Text
$_['text_extension']   = 'Модули';
$_['text_success']     = 'Настройки модуля обновлены!';
$_['text_edit']        = 'Редактирование модуля';

// Entry
$_['entry_status']     = 'Статус';

// Error
$_['error_permission'] = 'У вас нет прав для управления этим модулем!';

TPL:

<?php echo $header; ?><?php echo $column_left; ?>
<div id="content">
    <div class="page-header">
        <div class="container-fluid">
            <div class="pull-right">
                <button type="submit" form="form-price" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i></button>
                <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
            <h1><?php echo $heading_title; ?></h1>
            <ul class="breadcrumb">
                <?php foreach ($breadcrumbs as $breadcrumb) { ?>
                <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
                <?php } ?>
            </ul>
        </div>
    </div>
    <div class="container-fluid">
        <?php if ($error_warning) { ?>
        <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?>
            <button type="button" class="close" data-dismiss="alert">&times;</button>
        </div>
        <?php } ?>
        <div class="panel panel-default">
            <div class="panel-heading">
                <h3 class="panel-title"><i class="fa fa-pencil"></i> <?php echo $text_edit; ?></h3>
            </div>
            <div class="panel-body">
                <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-price" class="form-horizontal">
                    <div class="form-group">
                        <label class="col-sm-2 control-label" for="input-status"><?php echo $entry_status; ?></label>
                        <div class="col-sm-10">
                            <select name="price_status" id="input-status" class="form-control">
                                <?php if ($price_status) { ?>
                                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                                <option value="0"><?php echo $text_disabled; ?></option>
                                <?php } else { ?>
                                <option value="1"><?php echo $text_enabled; ?></option>
                                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                                <?php } ?>
                            </select>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>
<?php echo $footer; ?>

 

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


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

$this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'], true));

для 230х правильно будет

$this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true));

как пример - смотрите admin\controller\extension\module\pp_button.php

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


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

Подправил, но ничего не изменилось( в админке модуль он не появился

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


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

ControllerMypricePrice

ControllerExtensionModuleMypricePrice 

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


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

странно, я думал папки с файлами можно сразу кидать в корень admin, catalog. Ну ладно я перенес файлы в extension/module, подправил пути в контроллере:

 

<?php
class ControllerExtensionModuleMypricePrice extends Controller {
    private $error = array();

    public function index() {
        $this->load->language('extension/module/myprice/price');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('setting/setting');

        if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
            $this->model_setting_setting->editSetting('price', $this->request->post);

            $this->session->data['success'] = $this->language->get('text_success');

            $this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true));
        }

        $data['heading_title'] = $this->language->get('heading_title');

        $data['text_edit'] = $this->language->get('text_edit');
        $data['text_enabled'] = $this->language->get('text_enabled');
        $data['text_disabled'] = $this->language->get('text_disabled');

        $data['entry_status'] = $this->language->get('entry_status');

        $data['button_save'] = $this->language->get('button_save');
        $data['button_cancel'] = $this->language->get('button_cancel');

        if (isset($this->error['warning'])) {
            $data['error_warning'] = $this->error['warning'];
        } else {
            $data['error_warning'] = '';
        }

        $data['breadcrumbs'] = array();

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_home'),
            'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], true)
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_extension'),
            'href' => $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true)
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('heading_title'),
            'href' => $this->url->link('extension/module/myprice/price', 'token=' . $this->session->data['token'], true)
        );

        $data['action'] = $this->url->link('extension/module/myprice/price', 'token=' . $this->session->data['token'], true);

        $data['cancel'] = $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true);

        if (isset($this->request->post['price_status'])) {
            $data['price_status'] = $this->request->post['price_status'];
        } else {
            $data['price_status'] = $this->config->get('price_status');
        }

        $data['header'] = $this->load->controller('common/header');
        $data['column_left'] = $this->load->controller('common/column_left');
        $data['footer'] = $this->load->controller('common/footer');

        $this->response->setOutput($this->load->view('extension/module/myprice/price', $data));
    }

    protected function validate() {
        if (!$this->user->hasPermission('modify', 'extension/module/myprice/price')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }

        return !$this->error;
    }
}

И все равно модуль не отображается, самое интересное, до этого я мог войти в настройки моего модуля через ссылку http://localhost/OpenCart/admin/index.php?route=myprice/price&token=nMtrf3EITO6dOjzLWS18XsG74tZHkcmq, единственное что я не мог его добавить в макет, поскольку его фактически не было в дополнениях. Теперь после изменения пути по запросу http://localhost/OpenCart/admin/index.php?route=extension/module/myprice/price&token=nMtrf3EITO6dOjzLWS18XsG74tZHkcmq мне выдает что доступ запрещен. Что не так?

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

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


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

проверить права доступа группы пользователя в настройках админки к данному модулю

проверить название файла и его путь

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


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

Еще раз все перепроверил: права на просмотр и редактирование у группы администраторов на этот модуль присутствуют. Названия классов, пути в файликах и т.д. вроде бы тоже в норме.
Вот такая карта модуля вышла в папке admin:
C:\Wamp64\www\OpenCart\admin\controller\extension\module\myprice\price.php

C:\Wamp64\www\OpenCart\admin\view\template\extension\module\myprice\price.tpl

C:\Wamp64\www\OpenCart\admin\language\ru-ru\extension\module\myprice\price.php

Единственное что я раньше не сказал - модуль пишу для ocStore 2.3.

Ну я уже не знаю, может регистр в названии класса играет какую-то роль, например не ControllerExtensionModuleMypricePrice а ControllerExtensionModuleMyPricePrice или еще как-то, хотя я сильно в этом сомневаюсь.

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

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


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

попробуйте без вложенной папки myprice

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


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

Отлично, проблема решилась после удаления папок myprice, спасибо большое! хотя конечно странно, почему такое влияет на корректность работы модуля. Теперь я добавил данный модуль в макет главной страницы иии.. ничего, данные с него не отображаются, хотя если обратиться по ссылке http://localhost/OpenCart/index.php?route=extension/module/price то все работает (на отдельной странице), какие есть мысли у кого на этот счет?) Пробовал добавлять права на просмотр у группы пользователей Demonstration в админке, но подозреваю это касается только админки

 

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


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

Все вопрос решен, нужно было в контроллере модуля в папке catalog вместо:

return $this->response->setOutput($this->load->view('extension/module/price', $data));

написать:

return $this->load->view('extension/module/price', $data);

Выходит, что первый вариант работает при ссылке на отдельную страницу, а последний при вставке в уже существующую.

Еще раз всем спасибо за помощь! Удачи!)

 

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

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


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

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

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

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

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

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

Войти

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

Войти


  • Похожий контент

    • От virtas
      Есть два товара в отдельно созданной для них категории
      Как исключить их в определенных модулях ? - Новинки Акции

      Суть в том что эти товары аукционные ! и мне нужно вывести их на главной и я их поместил в модуль Рекомендуемые ! и так как они акцыоные они отображаются и там и та !

      Я ЕЩЕ ДУМАЛ ВЗЯТЬ ЗА ОСНОВУ МОДУЛЬ РЕКОМЕНДУЕМЫЕ И ИМ НА ГЛАВНОЙ ВЫВЕСТИ ТЕ ТОВАРЫ КОТОРЫЕ МНЕ НУЖНО СОЗДАВ ИХ НЕСКОЛЬКО ! НО !!! ОПЯТЬ ЗАМИНКА НЕ ЗНАЮ КАК ПРОПИСАТЬ НАЗВАНИЕ МОДУЛЯ ТО ЧТО ПИШУ В АДМИНКЕ - НАПРИМЕР АКЦИИ И АКЦИИ2 
       
      Версия 2.3.0.2.3  pro
    • От AleksGor
      Опенкарт 2
      на сайте установлен модуль и база подбора шин и дисков по авто
      база 2013 года
      есть база новая 2017 года - нужно ее обновить

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

      какая нужна дополнительная информация? 
      ---
      кто может сделать? 
      какой срок и стоимость? 
       
    • От guck
      Клон доставки с фиксированной стоимостью OC 2.3.0.2
      Скачать/Купить дополнение Клон доставки с фиксированной стоимостью для OC 2.3.0.2
      Добавил guck Добавлено 29.09.2017 Категория Доставки Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3 ocStore 2.3 OpenCart.Pro, ocShop  
    • От zl0y250
      Добрый день, хочу услышать мнение экспертов по данному модулю SEO Backpack.
      Интересно знать плюсы и минусы. 
      Полезен ли он для сео или очередной маркетинг как остальные модули типа Seo Pack Pro и т.д.
      Да и вообще интересно услышать советы знающих людей по СЕО оптимизации.
      Заранее спасибо за ответы)
    • От codenamexxxxx
      До помогите найти модуль чтоб в акциях били категории акций для Opencart 1.5.6
       
      Что то на подобие :
      Модуль "Категории скидок"
      https://***/modul-upravleniya-skidok
      только з поддержкой, если будет что не так тогда даром израсходование  деньги
       
      Или
       
       
      Писал автору не совместимо с 1.5.6
       
  • Последние посетители   0 пользователей онлайн

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