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

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

Добрый день! Решил разобраться с тем как создаются модули на 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; ?>

 

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


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

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


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

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

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


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

ControllerMypricePrice

ControllerExtensionModuleMypricePrice 

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


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

странно, я думал папки с файлами можно сразу кидать в корень 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

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


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

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

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

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


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

Еще раз все перепроверил: права на просмотр и редактирование у группы администраторов на этот модуль присутствуют. Названия классов, пути в файликах и т.д. вроде бы тоже в норме.
Вот такая карта модуля вышла в папке 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

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


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

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

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


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

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

 

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


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

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

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

написать:

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

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

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

 

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

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


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

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

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

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

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

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

Войти

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

Войти

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

    • От fonclub
      500.00 руб
      Скачать/Купить дополнение


      Закрытое предложение после оформления
      Модуль «Закрытое предложение» позволяет создать специальное предложение для покупателей вашего магазина, купивших товар на определенную сумму.
      После оформления заказа на странице checkout/success выводится специальный блок с товаром со скидкой, который покупатель может добавить к только что созданному заказу в течении определенного времени. 
      Время, список товаров, диапазон сумм и уровень скидок - все это вы задаете в админке в самом модуле. При добавлении в 1 диапазон списка товаров будет выводиться 1 из товаров, рандомно. 
      Если под сумму заказа пользователя нет подходящих диапазонов - модуль не выводится. 
      В истории заказа при добавлении товара со скидкой пишется комментарий closed offer, чтобы администратор мог понять почему 1 из товаров в заказе со скидкой. 
      В заказ может быть добавлен только 1 товар со скидкой, после этого модуль скрывается. 
      Если покупатель не успевает в течении заданного времени - выводится текст, который вы можете задать в админке и модуль так же скрывается.
      Товары, которые были в заказе, в модуле не показываются, даже если заданы в настройках!

      Модуль не работает с онлайн оплатой, поэтому в настройках не забудьте указать, какие способы оплаты исключить!
       
      Обратите внимание, что при указании диапазона цен в настройках модуля, если у вас мультивалютный магазин - нужно указывать диапазон в основной валюте. Если у вас магазин работает в $, евро и рублях, но основная валюта $ - то именно в ней и должен указываться диапазон.
       
      Возможности:
      - Все необходимые настройки вынесены в админку.
      - Можно добавить неограниченное количество товаров и диапазонов сумм.
      - css стили вынесены в отдельный файл и их можно менять под себя.
      - Полная совместимость со стандартным шаблоном.
      - Уведомления администраторам о добавлении товара в заказ.
       
      Никакие системные файлы не затираются. Используется ocmod для изменения всего 1 файла!
       
      Демо http://oc2.7cub.ru
       
      Демо админки http://oc2.7cub.ru/admin/index.php?route=extension/module/closed_offer demo/demo
       
      Видео демо:
      https://www.youtube.com/watch?v=jbS9xcsqgSo
      Добавил fonclub Добавлено 06.11.2018 Категория Модули Системные требования php 5.4 и выше Сайт разработчика https://fonclub-blog.ru Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3 ocStore 3.0
      2.3 OpenCart.Pro, ocShop Opencart.pro 2.3  
    • От fonclub
      Модуль «Закрытое предложение» позволяет создать специальное предложение для покупателей вашего магазина, купивших товар на определенную сумму.
      После оформления заказа на странице checkout/success выводится специальный блок с товаром со скидкой, который покупатель может добавить к только что созданному заказу в течении определенного времени. 
      Время, список товаров, диапазон сумм и уровень скидок - все это вы задаете в админке в самом модуле. При добавлении в 1 диапазон списка товаров будет выводиться 1 из товаров, рандомно. 
      Если под сумму заказа пользователя нет подходящих диапазонов - модуль не выводится. 
      В истории заказа при добавлении товара со скидкой пишется комментарий closed offer, чтобы администратор мог понять почему 1 из товаров в заказе со скидкой. 
      В заказ может быть добавлен только 1 товар со скидкой, после этого модуль скрывается. 
      Если покупатель не успевает в течении заданного времени - выводится текст, который вы можете задать в админке и модуль так же скрывается.
      Товары, которые были в заказе, в модуле не показываются, даже если заданы в настройках!

      Модуль не работает с онлайн оплатой, поэтому в настройках не забудьте указать, какие способы оплаты исключить!
       
      Обратите внимание, что при указании диапазона цен в настройках модуля, если у вас мультивалютный магазин - нужно указывать диапазон в основной валюте. Если у вас магазин работает в $, евро и рублях, но основная валюта $ - то именно в ней и должен указываться диапазон.
       
      Возможности:
      - Все необходимые настройки вынесены в админку.
      - Можно добавить неограниченное количество товаров и диапазонов сумм.
      - css стили вынесены в отдельный файл и их можно менять под себя.
      - Полная совместимость со стандартным шаблоном.
      - Уведомления администраторам о добавлении товара в заказ.
       
      Никакие системные файлы не затираются. Используется ocmod для изменения всего 1 файла!
       
      Демо http://oc2.7cub.ru
       
      Демо админки http://oc2.7cub.ru/admin/index.php?route=extension/module/closed_offer demo/demo
       
      Видео демо:
      https://www.youtube.com/watch?v=jbS9xcsqgSo
    • От DRoVa
      View File


      OpenCart_Poll - Система голосований
      OpenCart_Poll 1.2
      проверено на ocStore-2.3.0.2.3 
       
      Установка:
      Через меню администрации -> Дополнения / Установщик дополнений OCMOD
      Файлы не переписываются. Не забываем обновлять дополнения.
       
      Описание:
      Система голосования для зарегистрированных пользователей.
      Используется AJAX, то есть голоса принимаются без перегрузки страницы.

      В наличии:
      - модуль вывода голосования (возможно выводить как отдельные голосования, так и все текущие или одно из не проголосованных).
      - страница создания и редактирования голосования (в том числе просмотр голосов).
       
      Особенности:
      - при включении модуля создаются таблицы и доступы, при выключении таблицы удаляются.
      - в голосовании у которого есть хоть один голос не редактируются описания, да бы не было шума типа "Я голосовал не за ЭТО".
          
      Submitter DRoVa Submitted 06/12/2018 Category Blogs, News & Articles Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3 ocStore 2.3 OpenCart.Pro, ocShop Opencart.pro 2.3
      OcShop 2.0.3.х  
    • От DRoVa
      OpenCart_Poll 1.2
      проверено на ocStore-2.3.0.2.3 
       
      Установка:
      Через меню администрации -> Дополнения / Установщик дополнений OCMOD
      Файлы не переписываются. Не забываем обновлять дополнения.
       
      Описание:
      Система голосования для зарегистрированных пользователей.
      Используется AJAX, то есть голоса принимаются без перегрузки страницы.

      В наличии:
      - модуль вывода голосования (возможно выводить как отдельные голосования, так и все текущие или одно из не проголосованных).
      - страница создания и редактирования голосования (в том числе просмотр голосов).
       
      Особенности:
      - при включении модуля создаются таблицы и доступы, при выключении таблицы удаляются.
      - в голосовании у которого есть хоть один голос не редактируются описания, да бы не было шума типа "Я голосовал не за ЭТО".
          
    • От Savchin
      Всем доброго времени суток. Имеется проблема с магазином. Заранее извиняюсь, но это первый опыт.
      Интернет-магазин http://www.coffeeshops.com.ua
      Проблема № 1: Часто при первом заходе на сайт, не загружаются иконки на кнопках и тд. Вместо иконок просто квадратики, как только перейти на любую страницу внутри сайта, сразу все нормализуется.
      Проблема №2: Если находится в категории, не добавляется товар в корзину. Нажимаешь на кнопку но ничего не происходит. 
      Проблема№3: Поиск по сайту работает только со странице в поиске. если вводить в поисковую строку и нажать на лупу, вы просто попадете на страницу поиска, где сноа уже надо ввести запрос.
       
      Большое спасибо всем, кто откликнулся
  • Последние посетители   0 пользователей онлайн

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

×

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

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