Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Проблема с модулем. Could not load model


 Поделиться

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

Добрый день.

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

 

Спойлер

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