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

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    865
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    410
Цитата

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    865

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

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

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


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

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

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


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

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

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

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

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

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

Войти

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

Войти


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

    • От Prorab337

      1 200.00 руб
      Скачать/Купить дополнение


      "Новая Почта API" - модуль доставки для OpenCart 2
      Данный модуль по праву считается лучшим решением для организации доставки Новой Почтой в Вашем интернет-магазине. Дополнение решает практически все задачи, которые возникают при работе с Новой Почтой и является отличным помощником на любом этапе работы с заказами. Кроме стандартных функций модуля доставки имеются инструменты для работы с Экспресс Накладными. Также доступны две функции калькулятора: расчет стоимости и срока доставки. Все расчеты происходят при помощи API, что гарантирует получение самых точных данных.
       
      Дополнение также имеет ряд функций, которые за Вас в автоматическом режиме выполняют ежедневную рутинную работу: рассылка уведомлений с номером накладной, смена статусов заказа, напоминание о не забранных посылках и т.д.
       
      Данный модуль не перезаписывает и не удаляет стандартные файлы и таблицы базы OpenCart. В работе модуля используется API «Новой Почты», что позволяет всегда иметь актуальную информацию о городах, отделениях, отправлениях и т.д., а также взаимодействовать непосредственно с Новой Почтой используя большое количество готовых решений, предоставляемых компанией. И это не все возможности модуля, функционал постоянно расширяется и улучшается. Приобретая модуль Вы будете экономить уйму времени и значительные денежные средства на обработке заказов и разработке аналогичного функционала.
       
      По ссылкам, предоставленным ниже, можно перейти на демонстрационный сайт. Для доступа в админ-панель используйте следующие данные: логин и пароль - demo
       

       
      Функциональные возможности Основные возможности
       большое количество настроек  удобное ручное и автоматическое обновление городов, отделений и другой справочной информации  создание, редактирование и удаление накладных  максимальное заполнение формы накладной в автоматическом режиме  скачивание и печать накладных, и маркировок  просмотр списка накладных непосредственно в админ-панели  автоматическое отслеживание отправлений, смена статусов заказа и отправка уведомлений  самый точный предварительный расчет стоимости доставки  расчет ориентировочного срока доставки  автоматическое определение и учет типа упаковки  автоматический расчет параметров отправления  выбор и поиск городов, отделений. Возможность задать дополнительные поля для адресной доставки подробнее...   Поддерживаемые языки украинский русский английский В некоторых методах API заявлена поддержка украинского, русского и английского языков. На практике же реализована 100% поддержка только украинского языка. Названия городов и отделений Новой Почты доступны на украинском и русском языках. Модуль автоматически показывает нужный перевод в зависимости от настроек OpenCart или предпочтений покупателя во время оформления заказа.
      Совместимость OpenCart v. 2.X.X (также сборки на базе OpenCart соответствующих версий формы заказа: стандартная, Ajax Quick Checkout, Simple checkout & registration (максимальный функционал), Journal Quick Checkout, Fast Order (только выбор города и отделения) Теоретически возможна поддержка всех версий указанных модулей, ну возможно потребуется адаптация для конкретных версий. Адаптацию для других модулей и шаблонов выполним по запросу за ДОПОЛНИТЕЛЬНУЮ ПЛАТУ.
      Лицензия  лицензия действует только на один домен и на все его поддомены, и тестовые сайты  информация о порядке получения лицензии доступна после установки модуля  активация лицензии происходит в течении нескольких часов после покупки Требования ionCube Loader версии 5.0 и выше PHP библиотека CURL PHP версии 5.3 и выше  
      Перед установкой на работающем интернет-магазине рекомендуем выполнить установку и тестирование модуля на тестовом сайте или поддомене!
       
      Детальная инструкция по установке, настройке, обновлению и удалению модуля доступна в архиве в файле instruction.html
      Добавил Prorab337 Добавлено 22.06.2015 Категория Доставки Системные требования PHP библиотека CURL, PHP версии 5.3 и выше Сайт разработчика https://oc-max.com Старая цена Метод активации По запросу в ЛС
      По скайпу
      Через официальный сайт дополнения Ioncube Loader Требуется OpenCart 2.3
      2.2
      2.1
      2.0 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х  
    • От sosis04ka
      Всем привет, я новичок в OpenCart, есть страница "где купить" там выводится список магазинов их нужно фильтровать по стране и местоположению а я вообще не знаю как это реализовать гуглил, искал на форумах ну никак не могу найти, подскажите пожалуйста дайте хотя бы подсказку как это сделать.
      Заранее все спасибо!
    • От legioner26

      400.00 руб
      Скачать/Купить дополнение


      Пагинация Опций в админке для крупных ИМ
      Разработан модификатор с пагинацией для опций в админ панели.
      Данный модификатор предназначен для интернет магазинов с большим списком параметров в опциях, с которыми сложно работать и подгружают сайт.
      Установив модификатор Вы получите список параметров опции в превычном постраничном для Вас виде, также при удалении параметра в админ панели не надо жать на кнопку сохранить, все происходит автоматически.
      В архиве 2 папки
      ОС 2.0-2.1 - Для версий 2.0-2.1
      ОС 2.2-2.3 - Для версий 2.2-2.3
       
      Установка:
      Устанавливаете модификатор через "Установка расширений", далее в модификаторах чистим кеш и обновляем.
      Добавил legioner26 Добавлено 16.12.2017 Категория Опции Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1
      2.0 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop  
    • От legioner26
      Разработан модификатор с пагинацией для опций в админ панели.
      Данный модификатор предназначен для интернет магазинов с большим списком параметров в опциях, с которыми сложно работать и подгружают сайт.
      Установив модификатор Вы получите список параметров опции в превычном постраничном для Вас виде, также при удалении параметра в админ панели не надо жать на кнопку сохранить, все происходит автоматически.
      В архиве 2 папки
      ОС 2.0-2.1 - Для версий 2.0-2.1
      ОС 2.2-2.3 - Для версий 2.2-2.3
       
      Установка:
      Устанавливаете модификатор через "Установка расширений", далее в модификаторах чистим кеш и обновляем.
    • От Prorab337
      Данный модуль по праву считается лучшим решением для организации доставки Новой Почтой в Вашем интернет-магазине. Дополнение решает практически все задачи, которые возникают при работе с Новой Почтой и является отличным помощником на любом этапе работы с заказами. Кроме стандартных функций модуля доставки имеются инструменты для работы с Экспресс Накладными. Также доступны две функции калькулятора: расчет стоимости и срока доставки. Все расчеты происходят при помощи API, что гарантирует получение самых точных данных.
       
      Дополнение также имеет ряд функций, которые за Вас в автоматическом режиме выполняют ежедневную рутинную работу: рассылка уведомлений с номером накладной, смена статусов заказа, напоминание о не забранных посылках и т.д.
       
      Данный модуль не перезаписывает и не удаляет стандартные файлы и таблицы базы OpenCart. В работе модуля используется API «Новой Почты», что позволяет всегда иметь актуальную информацию о городах, отделениях, отправлениях и т.д., а также взаимодействовать непосредственно с Новой Почтой используя большое количество готовых решений, предоставляемых компанией. И это не все возможности модуля, функционал постоянно расширяется и улучшается. Приобретая модуль Вы будете экономить уйму времени и значительные денежные средства на обработке заказов и разработке аналогичного функционала.
       
      По ссылкам, предоставленным ниже, можно перейти на демонстрационный сайт. Для доступа в админ-панель используйте следующие данные: логин и пароль - demo
       

       
      Функциональные возможности Основные возможности
       большое количество настроек  удобное ручное и автоматическое обновление городов, отделений и другой справочной информации  создание, редактирование и удаление накладных  максимальное заполнение формы накладной в автоматическом режиме  скачивание и печать накладных, и маркировок  просмотр списка накладных непосредственно в админ-панели  автоматическое отслеживание отправлений, смена статусов заказа и отправка уведомлений  самый точный предварительный расчет стоимости доставки  расчет ориентировочного срока доставки  автоматическое определение и учет типа упаковки  автоматический расчет параметров отправления  выбор и поиск городов, отделений. Возможность задать дополнительные поля для адресной доставки подробнее...   Поддерживаемые языки украинский русский английский В некоторых методах API заявлена поддержка украинского, русского и английского языков. На практике же реализована 100% поддержка только украинского языка. Названия городов и отделений Новой Почты доступны на украинском и русском языках. Модуль автоматически показывает нужный перевод в зависимости от настроек OpenCart или предпочтений покупателя во время оформления заказа.
      Совместимость OpenCart v. 2.X.X (также сборки на базе OpenCart соответствующих версий формы заказа: стандартная, Ajax Quick Checkout, Simple checkout & registration (максимальный функционал), Journal Quick Checkout, Fast Order (только выбор города и отделения) Теоретически возможна поддержка всех версий указанных модулей, ну возможно потребуется адаптация для конкретных версий. Адаптацию для других модулей и шаблонов выполним по запросу за ДОПОЛНИТЕЛЬНУЮ ПЛАТУ.
      Лицензия  лицензия действует только на один домен и на все его поддомены, и тестовые сайты  информация о порядке получения лицензии доступна после установки модуля  активация лицензии происходит в течении нескольких часов после покупки Требования ionCube Loader версии 5.0 и выше PHP библиотека CURL PHP версии 5.3 и выше  
      Перед установкой на работающем интернет-магазине рекомендуем выполнить установку и тестирование модуля на тестовом сайте или поддомене!
       
      Детальная инструкция по установке, настройке, обновлению и удалению модуля доступна в архиве в файле instruction.html
  • Последние посетители   0 пользователей онлайн

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