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

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

Добрый день.

При разработке своего модуля, столкнулся с следующей ошибкой:

 

Спойлер

Fatal error: Uncaught Exception: Error: Could not load model extension/module! in C:\OSPanel\domains\storage\modification\system\engine\loader.php:89 Stack trace: #0 C:\OSPanel\domains\opencart.loc\admin\controller\extension\module\vantage.php(16): Loader->model('extension/modul...') #1 C:\OSPanel\domains\storage\modification\system\engine\action.php(79): ControllerExtensionModuleVantage->index() #2 C:\OSPanel\domains\opencart.loc\admin\controller\startup\router.php(26): Action->execute(Object(Registry), Array) #3 C:\OSPanel\domains\storage\modification\system\engine\action.php(79): ControllerStartupRouter->index() #4 C:\OSPanel\domains\opencart.loc\system\engine\router.php(67): Action->execute(Object(Registry)) #5 C:\OSPanel\domains\opencart.loc\system\engine\router.php(56): Router->execute(Object(Action)) #6 C:\OSPanel\domains\opencart.loc\system\framework.php(168): Router->dispatch(Object(Action), Object(Action)) #7 C:\OSPanel\domains\opencart.loc\system\startup.php(104): require_once('C:\\OSPanel\\doma...') #8 C:\OSPa in C:\OSPanel\domains\storage\modification\system\engine\loader.php on line 89

 

При разработке пользуюсь обучающими материалами для версии 2.3

 

Состав и расположение файлов:

 

admin\controller\extension\module\vantage.php

Спойлер

<?php

class ControllerExtensionModuleVantage extends Controller {
    
    private $error = array(); 
    
    public function index() {   

        //Load language file
        $this->load->language('extension/module/vantage');

        //Set title from language file
        $this->document->setTitle($this->language->get('heading_title'));
        
        //Load settings model
        $this->load->model('extension/module');
        
        //Save settings
        if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
            if (!isset($this->request->get['module_id'])) {
                $this->model_extension_module->addModule('vantage', $this->request->post);
            } else {
                $this->model_extension_module->editModule($this->request->get['module_id'], $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'], 'SSL'));
        }
        
        $text_strings = array(
            'heading_title',
            'button_save',
            'button_cancel',
            'button_add_module',
            'button_remove',
            'placeholder',
            'text_enabled',
            'text_disabled',
            'error_name',
            'entry_name',
            'entry_status',
            'custom_field',
            );
        
        foreach ($text_strings as $text) {
            $data[$text] = $this->language->get($text);
        }
        

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

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

        if (isset($this->error['field'])) {
            $data['error_field'] = $this->error['field'];
        } else {
            $data['error_field'] = '';
        }
        
        $data['breadcrumbs'] = array();

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

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

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

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

        if (!isset($this->request->get['module_id'])) {
            $data['breadcrumbs'][] = array(
                'text' => $this->language->get('heading_title'),
                'href' => $this->url->link('extension/module/vantage', 'token=' . $this->session->data['token'], 'SSL')
                );
        } else {
            $data['breadcrumbs'][] = array(
                'text' => $this->language->get('heading_title'),
                'href' => $this->url->link('extension/module/vantage', 'token=' . $this->session->data['token'] . '&module_id=' . $this->request->get['module_id'], 'SSL')
                );
        }
        
        if (!isset($this->request->get['module_id'])) {
            $data['action'] = $this->url->link('extension/module/vantage', 'token=' . $this->session->data['token'], 'SSL');
        } else {
            $data['action'] = $this->url->link('extension/module/vantage', 'token=' . $this->session->data['token'] . '&module_id=' . $this->request->get['module_id'], 'SSL');
        }

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

        if (isset($this->request->get['module_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) {
            $module_info = $this->model_extension_module->getModule($this->request->get['module_id']);
        }

        //Must Have Module fields

        if (isset($this->request->post['name'])) {
            $data['name'] = $this->request->post['name'];
        } elseif (!empty($module_info)) {
            $data['name'] = $module_info['name'];
        } else {
            $data['name'] = '';
        }

        if (isset($this->request->post['status'])) {
            $data['status'] = $this->request->post['status'];
        } elseif (!empty($module_info)) {
            $data['status'] = $module_info['status'];
        } else {
            $data['status'] = '';
        }

        // Custom module fields

        if (isset($this->request->post['field'])) {
            $data['field'] = $this->request->post['field'];
        } elseif (!empty($module_info)) {
            $data['field'] = $module_info['field'];
        } else {
            $data['field'] = '';
        }

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

        //Send the output
        $this->response->setOutput($this->load->view('extension/module/vantage.twig', $data));
    }
    
    private function validate() {
        if (!$this->user->hasPermission('modify', 'extension/module/vantage')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }
        
        if ((utf8_strlen($this->request->post['name']) < 3) || (utf8_strlen($this->request->post['name']) > 64)) {
            $this->error['name'] = $this->language->get('error_name');
        }

        if ((utf8_strlen($this->request->post['field']) < 3) || (utf8_strlen($this->request->post['field']) > 64)) {
            $this->error['field'] = $this->language->get('error_field');
        }

        return !$this->error;

    }

}

 

admin\language\ru-ru\extension\module\vantage.php

Спойлер

<?php

/*
 * English 
 * 
 */

 // Heading
$_['heading_title']    = 'Преимущества';

// Entry
$_['entry_name']       = 'Название модуля';
$_['entry_status']     = 'Статус';

//Custom Field
$_['custom_field']       = 'Field';

// Text
$_['text_module']      = 'Modules';
$_['text_total']      = 'Order Totals';
$_['text_payment']      = 'Payments';
$_['text_shipping']      = 'Shipping';
$_['text_feed']      = 'Feeds';
$_['text_success']     = 'Success: You have modified module Starter!';
$_['placeholder']   = 'Add your module code here';

// Error
$_['error_permission'] = 'Warning: You do not have permission to modify module Starter!';
$_['error_name']       = 'Module Name must be between 3 and 64 characters!';
$_['error_field']       = 'Module Name must be between 3 and 64 characters!';

 

admin\view\template\extension\module\vantage.twig

Спойлер

{{ header }} {{ column_left }}
<div id="content">

    <div class="page-header">
        <div class="container-fluid">
            <div class="pull-right">
                <button type="submit" form="form-starter" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
                <a href="{{ cancel }}>" data-toggle="tooltip" title="{{ button_cancel }}>" class="btn btn-default"><i class="fa fa-reply"></i></a>
            </div>
            <h1>{{ heading_title }}</h1>
            <ul class="breadcrumb">
                {% for breadcrumbs in breadcrumb %}
                <li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
                {% endfor %}
            </ul>
        </div>
    </div>

    <div class="container-fluid">
        {% if error_warning %}
        <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
            <button type="button" class="close" data-dismiss="alert">&times;</button>
        </div>
        {% endif %}
        <div class="panel panel-default">
            <div class="panel-heading">
                <h3 class="panel-title"><i class="fa fa-cogs"></i> {{ heading_title }}</h3>
            </div>
            <div class="panel-body">
                <p>{{ placeholder }}</p>
                <form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-starter" class="form-horizontal">
                    
                    <div class="form-group">
                        <label class="col-sm-2 control-label" for="input-name">{{ entry_name }}</label>
                        <div class="col-sm-10">
                            <input type="text" name="name" value="{{ name }}" placeholder="{{ entry_name }}" id="input-name" class="form-control" />
                            {% if error_name %}
                            <div class="text-danger">{{ error_name }}</div>
                            {% endif %}
                        </div>
                    </div>

                    <div class="form-group">
                        <label class="col-sm-2 control-label" for="input-status">{{ entry_status }}</label>
                        <div class="col-sm-10">
                            <select name="status" id="input-status" class="form-control">
                                {% if status %}
                                <option value="1" selected="selected">{{ text_enabled }}</option>
                                <option value="0">{{ text_disabled }}</option>
                                {% else %}
                                <option value="1">{{ text_enabled }}</option>
                                <option value="0" selected="selected">{{ text_disabled }}</option>
                                {% endif %}
                            </select>
                        </div>
                    </div>

                    <div class="form-group">
                        <label class="col-sm-2 control-label" for="input-field">{{ custom_field }}</label>
                        <div class="col-sm-10">
                            <input type="text" name="field" value="{{ field }}" placeholder="{{ custom_field }}>" id="input-field" class="form-control" />
                            {% if error_field %}
                            <div class="text-danger">{{ error_field }}</div>
                            {% endif %}
                        </div>
                    </div>

                </form>
            </div>
        </div>
    </div>
</div>
{{ footer }}

 

catalog\controller\extension\module\vantage.php

Спойлер

<?php

class ControllerExtensionModuleVantage extends Controller {
    
    public function index($setting) {
        
        //Load language file
        $this->language->load('extension/module/vantage');

        //Set title from language file
        $data['heading_title'] = $this->language->get('heading_title');

        //Load Styles & Scripts
        // $this->document->addStyle('catalog/view/javascript/path/to/library.css');
        // $this->document->addScript('catalog/view/javascript/path/to/library.js');

        //Custom
        $data['field'] = $setting['field'];

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

    }
}

 

catalog\language\ru-ru\extension\module\vantage.php

Спойлер

<?php

// Heading 
$_['heading_title']  = 'Преимущества';

 

catalog\view\theme\default\template\extension\module\vantage.twig

Спойлер

<!-- Start Starter module -->
{{ field }}
<!-- End Starter module -->

 

Данная ошибка выходит при попытке редактировать модуль в панели администратора.

Прошу помочь разобраться, в чем может быть дело?

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


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

Error: Could not load model extension/module!

Нет файла модели.

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


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

При разработке пользуюсь обучающими материалами для версии 2.3

а у вас то версия какая?

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


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

а у вас то версия какая?

У меня 3.0.2.0 

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


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

Нет файла модели.

В версии 2.3 он откуда-то подгружается как я понимаю. В версии 3 похоже его нет, либо находится в другом месте..

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


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

ну да. поэтому читайте свежие мануалы

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


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

ну да. поэтому читайте свежие мануалы

В этом то как раз и проблема. Не смог найти в поиске эту ошибку, которую решили в свежей версии.

Вся информация идет под сборку 2.*.*.*

Поэтому обратился сюда, в надежде, что кто-то уже сталкивался с ней.

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


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, kHRISTAL сказал:

В версии 2.3 он откуда-то подгружается как я понимаю.

 $this->load->model('extension/module');
2 часа назад, kHRISTAL сказал:

либо находится в другом месте.

именно

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

 

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


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

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

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

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

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

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

Войти

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

Войти

  • Последние посетители   0 пользователей онлайн

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

×

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

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