Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Проблема при создании модуля


Recommended Posts

Добрый день! Решил разобраться с тем как создаются модули на 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, спасибо большое! хотя конечно странно, почему такое влияет на корректность работы модуля. Теперь я добавил данный модуль в макет главной страницы иии.. ничего, данные с него не отображаются, хотя если обратиться по ссылке 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
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.