OpenCart 3.x - 包括一个新的模板文件

OpenCart 3.x - including a new template file

我需要将新的 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 }}

我想我在添加新模板文件时不知何故遗漏了一个步骤?如果有人可以帮我添加一个新的树枝文件,那就太好了。

我没学过OpenCart3.x,但我猜你需要改变

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

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

catalog/controller/common/header.php.

您可以:

  • 如@bogalakon 指出的那样,在 controller/common/header 的 OpenCart 级别更改 Twig 渲染模板的名称(最好通过 ocmod 执行此操作,以便您将来的 OpenCart 更新不会覆盖您的 hack)。
  • 或在 Twig 级别包含另一个模板

即:

{{ 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 documentation.

为了通过 {{header_home}} 构造连接另一个模板,您需要在文件夹 /controller/common/directory 中创建 header_home.php,创建 header_home.twig主题 /*theme_name*/template/common/ 文件夹和负责页面形成的控制器中的文件,例如目录 /controller/common/home.php

添加一行:

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

之前:

'$ this-> response-> setOutput ($ this-> load-> view (' common / home ', $ data)); '

@bogalakon 的回答是正确的,但是如果你更新你的 OpenCart 核心文件,你将丢失你的更改,所以我建议你复制 header.php 控制器文件并将其重命名为 header_home.php 和然后编辑文件并替换行

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

与:

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

有几种方法可以给出不同的值。

例如:

考虑控制器

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

变量 {{header}} 在模板中可用

您可以将新模板放在另一个文件中(header_home.twig),然后您可以立即下载新模板使用模板:

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

如果你想在模板中使用 {{header}}。

或者,

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

在模板中使用{{header_home}}。

要添加您自己的自定义 twig 文件并将其包含在另一个现有文件中,您需要做三件事:

  1. 创建实际的自定义树枝文件。 在您的情况下,它将是: catalog/view/theme/customtheme/template/common/header_home.twig
  2. 为那个 twig 文件创建一个控制器。在您的情况下,您可以复制: /catalog/controller/common/header.php 并将其重命名为 header_home.php。编辑此控制器并通常在第 2 行将 class 名称更改为 ControllerCommonHeaderHome
  3. 最后,由于您要在 home.twig 中包含 header_home,请编辑 /catalog/controller/common/home.php 并在 $data['header'] = $this->load->controller('common/header');[=29= 之后添加行 $data['header'] = $this->load->controller('common/header_home'); ]

就是这样。完成上述步骤后,您现在可以在 home.twig 中包含 {{ header_home }}。如果你直接编辑文件,我发现有时我需要登录网站的管理员,去设计>主题编辑器,打开我添加或更改的文件,点击重置,然后保存。刷新您的网站,您应该会看到更改。