OpenCart 3.x - включая новый файл шаблона

Мне нужно добавить новый файл шаблона OpenCart в другой файл шаблона.

По сути, я создал новый головной файл в /theme/customtheme/template/common/ под названием «header_home.twig».

Затем в home.twig я изменил {{ header }} на {{ header_home }}, но ничего не отображается.

По сути, все, что я сделал, это скопировал header.twig и переименовал его в header_home.twig, а также вставил «xxxxx», чтобы увидеть, вызывает ли он новый файл, который нет. Вместо этого он ничего не отображает.

Вот как теперь выглядит мой home.twig:

{{ header_home }}
<div id="common-home" class="container">
  <div class="row">{{ column_left }}
    {% if column_left and column_right %}
    {% set class = 'col-sm-6' %}
    {% elseif column_left or column_right %}
    {% set class = 'col-sm-9' %}
    {% else %}
    {% set class = 'col-sm-12' %}
    {% endif %}
    <div id="content" class="{{ class }}">{{ content_top }}{{ content_bottom }}</div>
    {{ column_right }}</div>
</div>
{{ footer }}

Я предполагаю, что я как-то пропустил шаг, когда дело доходит до добавления нового файла шаблона? Если бы кто-нибудь мог помочь мне добавить новый файл ветки, это было бы здорово.


person Leanne Seawright    schedule 07.08.2017    source источник
comment
Если вы хотите включить другие шаблоны. Дополнительные методы повторного использования кода можно найти здесь   -  person DarkBee    schedule 07.08.2017


Ответы (6)


Я не изучил OpenCart 3.x, но я думаю, вам нужно изменить

return $this->load->view('common/header', $data);

to

return $this->load->view('common/header_home', $data);

in catalog/controller/common/header.php.

person bogalakon    schedule 07.08.2017

Вы также можете:

  • Измените имя шаблона рендеринга Twig на уровне OpenCart в файле controller/common/header, как указал @bogalakon (желательно делать это через ocmod, чтобы ваши будущие обновления OpenCart не перезаписывали ваш хак).
  • или включить другой шаблон на уровне Twig

I.e.:

{{ header }} {# Original rendered to HTML OpenCart header - you can move it to your header_home.twig or just drop it #}
{% include customtheme/template/common/header_home.twig %}
<div id="common-home" class="container">
 ...

Twig — очень мощный язык шаблонов. И вы можете сделать гораздо больше, чем просто включить! Приятно, что OpenCart официально принял это. Но пока это просто Twig 1.24.2. См. документацию Twig.

person zhuiks    schedule 14.09.2017

Для того, чтобы через конструкцию {{header_home}} подключить другой шаблон, необходимо в папке /controller/common/directory создать файл header_home.php, в папке темы /*theme_name*/template/common/ создать файл header_home.twig и в контроллере, который отвечает за формирование страницы, например в каталоге /controller/common/home.php

добавить строку:

'$ data [' header_home '] = $ this-> load-> controller (' common / header_home '); '

до:

'$ this-> response-> setOutput ($ this-> load-> view (' common / home ', $ data)); '
person Алексей Ярош    schedule 22.11.2017

Ответ @bogalakon правильный, но если вы обновите файлы ядра OpenCart, вы потеряете свои изменения, поэтому я предлагаю вам скопировать файл контроллера header.php и переименовать его в header_home.php, а затем отредактировать файл и заменить строку

return $this->load->view('common/header', $data);

с:

return $this->load->view('common/header_home', $data);
person Designer    schedule 13.12.2017

Есть несколько способов дать другое значение.

Например:

Рассмотрим контроллер

$data['header'] = $this-> load-> controller ('common / header');

В шаблоне доступна переменная {{header}}

Вы можете поместить новый шаблон в другой файл (header_home.twig), а затем сразу же загрузить новый шаблон для использования:

$data['**header**'] = $this-> load-> controller ('common / ***header_home***');

Если вы хотите использовать {{header}} в шаблоне.

Or,

$data['**header_home**'] = $this-> load-> controller ('common / header_home');

Для использования {{header_home}} в шаблоне.

person Scard    schedule 17.07.2018

Чтобы добавить свой собственный файл ветки и включить его в другой существующий, вам нужно сделать три вещи:

  1. Создайте фактический пользовательский файл ветки. В вашем случае это будет: catalog/view/theme/customtheme/template/common/header_home.twig
  2. Создайте контроллер для этого файла ветки. В вашем случае вы можете просто скопировать: /catalog/controller/common/header.php и переименовать его в header_home.php. Отредактируйте этот контроллер и измените имя класса на ControllerCommonHeaderHome обычно в строке 2.
  3. Наконец, поскольку вы собираетесь включить header_home в home.twig, отредактируйте /catalog/controller/common/home.php и добавьте строку $data['header'] = $this->load->controller('common/header_home'); после $data['header'] = $this->load->controller('common/header');.

Вот и все. После того, как вы выполнили шаги, описанные выше, теперь вы можете включить {{ header_home }} в home.twig. Если вы редактируете файлы напрямую, я обнаружил, что иногда мне нужно войти в систему администратора веб-сайта, перейти в «Дизайн»> «Редактор тем», открыть файлы, которые я добавил или изменил, нажмите «Сброс» и сохраните. Обновите свой сайт, и вы должны увидеть изменения.

person James Dizon    schedule 04.02.2019