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

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    768
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    338
Цитата

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    768

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

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

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


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

попробуйте без вложенной папки 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

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


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

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

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

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

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

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

Войти

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

Войти


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

    • От Orel
      Добрый вечер уважаемые форумчане,
       
      хотел бы немного видоизменить шаблон, а именно уменьшить расстояние для описания продукта внизу, и на освободившееся место вставить модуль/шаблон
       
      продемонстрирую на одном из сайтов на опенкарт (не мой сайт)
      1 Скриншот: так выглядит по дефолту
      2 Скриншот: так я хотел бы, чтоб выглядело (сдвинуть текст в правую часть а на освобдившемся месте разместить модули для рекомендуемых товаров / новости по эксплуатации/ видео)
       
      1 скриншот
       
       
      2 Скриншот
       
      Буду признателен за советы
    • От louise170


      Просмотр файла Доставка по области
      Описание
      Модуль предназначен для расчета стоимости доставки по области в зависимости от километража.
      В настройках задаются магазины, где будет использоваться данный модуль, географические зоны (области), километраж до областных городов, цена за километр пробега и способы доставки работающие для областного центра, к которым будет добавляться цена доставки зависящая от километража.
      Никакие системные файлы не изменяются.
      Модуль тестировался на OpenCart:
      1.5.4.1 2.0.1.1 2.0.3.1 Модуль совместим с модулем упрощенной регистрации и заказа Simple.
      Поддерживаемые языки в комплекте:
      русский английский Установка и настройке
      Инструкция по установке и настройке находится в архиве модуля в файле readme.txt
      На демо-сайте вы можете посмотреть как настроены гео-зоны и способы доставки для областного центра.
      Пример работы модуля:
      http://ocstore1541.hypnoguru.ru/
      http://opencart2.opencartplus.ru/
      Демо админки:
      http://ocstore1541.hypnoguru.ru/admin
      http://opencart2.opencartplus.ru/admin
      доступ: demo / demo
      Обновление модуля
      Закачать все файлы из архива модуля на сайт. Зайти в админку модуля и нажать кнопку "Сохранить". Прописать настройки, которые появились в новой версии (если они вам нужны). Добавил louise170 Добавлено 31.01.2013 Категория Доставки Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.4.1 ocStore 2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1 OpenCart.Pro, ocShop Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х  
    • От louise170
      Описание
      Модуль предназначен для расчета стоимости доставки по области в зависимости от километража.
      В настройках задаются магазины, где будет использоваться данный модуль, географические зоны (области), километраж до областных городов, цена за километр пробега и способы доставки работающие для областного центра, к которым будет добавляться цена доставки зависящая от километража.
      Никакие системные файлы не изменяются.
      Модуль тестировался на OpenCart:
      1.5.4.1 2.0.1.1 2.0.3.1 Модуль совместим с модулем упрощенной регистрации и заказа Simple.
      Поддерживаемые языки в комплекте:
      русский английский Установка и настройке
      Инструкция по установке и настройке находится в архиве модуля в файле readme.txt
      На демо-сайте вы можете посмотреть как настроены гео-зоны и способы доставки для областного центра.
      Пример работы модуля:
      http://ocstore1541.hypnoguru.ru/
      http://opencart2.opencartplus.ru/
      Демо админки:
      http://ocstore1541.hypnoguru.ru/admin
      http://opencart2.opencartplus.ru/admin
      доступ: demo / demo
      Обновление модуля
      Закачать все файлы из архива модуля на сайт. Зайти в админку модуля и нажать кнопку "Сохранить". Прописать настройки, которые появились в новой версии (если они вам нужны).
    • От louise170


      Просмотр файла Производители плюс
      Модуль для отображения производителей с иконками. Настраивается кол-во выводимых в каждый блок производителей.
      Так же есть отдельная настраиваемая страница со всеми производителями.
      Никакие системные файлы не изменяются, используется vqmod.
      Модуль тестировался на OpenCart 1.5.4.1
      Поддерживаемые языки
      русский английский Пример работы модуля
      http://ocstore1541.hypnoguru.ru/
      Демо админки
      http://ocstore1541.hypnoguru.ru/admin/
      доступ demo / demo
      Установка
      Инструкция по установке находится в файле readme.txt в архиве модуля.
      Инструкция по установке VQMOD (если vqmod уже установлен выполняем сразу 5 пункт):
      Скачиваем последнюю версию vqmod для Opencart https://github.com/vqmod/vqmod/releases Загружаем по FTP папку "vqmod" в корневую директорию вашего сайта. Устанавливаем права 777 на папки /vqmod и /vqmod/vqcache В адресной строке браузера вводим http://имя-вашего-сайта/vqmod/install/, после чего должна появиться надпись об успешной установке VQMOD-а. Закачиваем из архива модуля файлы с расширением xml в папку /vqmod/xml Ручная установка: если по каким-то причинам вы не используете у себя на сайте vqmod, вы можете
      внести необходимы изменения в файлы вручную. Для этого откройте в папке vqmod/xml файлы относящиеся к модулю и
      смотрите там нужные вам изменения. Там, в принципе, понятно, где что на что менять.
      Но если вы не знакомы с синтаксисом файлов vqmod и вам не очень понятно что к чему, то предварительно
      можете почитать об этом тут:
      https://github.com/vqmod/vqmod/wiki/Examples
      https://github.com/vqmod/vqmod/wiki/Scripting
      Обновление модуля
      Закачать все файлы из архива модуля на сайт. Зайти в админку модуля и нажать кнопку "Сохранить". Прописать настройки, которые появились в новой версии (если они вам нужны). Добавил louise170 Добавлено 20.03.2013 Категория Прочее Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.4.1 ocStore 1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1 OpenCart.Pro, ocShop OcShop 1.5.6.4.х  
    • От louise170
      Модуль для отображения производителей с иконками. Настраивается кол-во выводимых в каждый блок производителей.
      Так же есть отдельная настраиваемая страница со всеми производителями.
      Никакие системные файлы не изменяются, используется vqmod.
      Модуль тестировался на OpenCart 1.5.4.1
      Поддерживаемые языки
      русский английский Пример работы модуля
      http://ocstore1541.hypnoguru.ru/
      Демо админки
      http://ocstore1541.hypnoguru.ru/admin/
      доступ demo / demo
      Установка
      Инструкция по установке находится в файле readme.txt в архиве модуля.
      Инструкция по установке VQMOD (если vqmod уже установлен выполняем сразу 5 пункт):
      Скачиваем последнюю версию vqmod для Opencart https://github.com/vqmod/vqmod/releases Загружаем по FTP папку "vqmod" в корневую директорию вашего сайта. Устанавливаем права 777 на папки /vqmod и /vqmod/vqcache В адресной строке браузера вводим http://имя-вашего-сайта/vqmod/install/, после чего должна появиться надпись об успешной установке VQMOD-а. Закачиваем из архива модуля файлы с расширением xml в папку /vqmod/xml Ручная установка: если по каким-то причинам вы не используете у себя на сайте vqmod, вы можете
      внести необходимы изменения в файлы вручную. Для этого откройте в папке vqmod/xml файлы относящиеся к модулю и
      смотрите там нужные вам изменения. Там, в принципе, понятно, где что на что менять.
      Но если вы не знакомы с синтаксисом файлов vqmod и вам не очень понятно что к чему, то предварительно
      можете почитать об этом тут:
      https://github.com/vqmod/vqmod/wiki/Examples
      https://github.com/vqmod/vqmod/wiki/Scripting
      Обновление модуля
      Закачать все файлы из архива модуля на сайт. Зайти в админку модуля и нажать кнопку "Сохранить". Прописать настройки, которые появились в новой версии (если они вам нужны).
  • Последние посетители   0 пользователей онлайн

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