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

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


Recommended Posts

Добрый день.

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

 

Спойлер

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 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

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