OpenCart 3 переменная общего / заголовка в расширении - PullRequest
0 голосов
/ 27 мая 2019

Я хотел бы добавить переменную / display в файл ветки common / header, которым можно управлять из нового расширения.Новое расширение создано.starter_module

Я добавил в: admin / view / template / extension / module / starter_module.twig

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

в admin / controller / extension / module / starter_module.php

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

в каталоге / контроллер / расширение / модуль / starter_module.php

            $data['new'] = $this->config->get('new');

            $data['new'] = (int) $setting['new'];  

в каталоге / просмотр / тема / по умолчанию / шаблон / общий / header.twig

{% if new %}Enabled {% else %} disabled{% endif %}

Но всегда получал результат только отключенный, чего не хватает?невозможно отправить переменную из расширения в общий заголовок?

Пожалуйста, помогите мне, если вы знаете проблему, здесь находятся нерабочие файлы https://github.com/bblori/Opencart3

Здесь вы можете увидеть одну из моих рабочих переменныхкоторый был установлен в настройках / установочных файлах и работает.

https://github.com/bblori/Enable-Style-OC3

XML-код

<modification>
<name>Starter Module</name>
<code>starter-module</code>
<version>1.0.0</version>
<author>Author</author>
<link>http://domain/</link>
    <file path="catalog/controller/common/header.php">
        <operation>
            <search><![CDATA[return $this->load->view('common/header', $data);]]></search>
            <add position="before"><![CDATA[
                    $data['config_new'] = $this->config->get('config_new'); 
           ]]></add>
        </operation>
    </file>

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Нельзя редактировать основные файлы или использовать vqmod.Основные файлы не должны быть изменены, потому что более поздние обновления сделают ваши модификации устаревшими.Vqmod, с другой стороны, добавляет ненужную сложность хорошо спроектированной системе.

Начиная с версии 3 команда Opencart представила события.События - это новый способ выполнения пользовательских функций, когда это необходимо.В следующий раз у вас возникнет аналогичное событие добавления проблемы (либо вручную, либо во время установки вашего модуля, как показано ниже).

public function install() {
    $this->load->model('setting/event');
    $this->model_setting_event->addEvent('my_data_manager', 'catalog/view/*/before', 'extension/module/my_data_manager/beforeAll');
}

Позже, во время цикла выполнения, ваша функция будет вызываться автоматически каждый раз при отображении common / header.

class ControllerExtensionModuleMyDataManager extends Controller {

    public function beforeAll(&$route, &$data, &$output){
        if ($route == 'common/header') {
            $data['my_custom_data'] = 'Mickey Mouse is not a bird!';
        }
    }
}

Наконец, добавьте {{ my_custom_data }} к template/common/header.twig

0 голосов
/ 27 мая 2019

переместите ваш код из вашего начального модуля в header.php

$data['new'] = $this->config->get('new');
$data['new'] = (int) $setting['new']; 
...