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

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

我猜在添加新的模板文件时,我可能漏掉了某个步骤?如果有人能帮我添加一个新的twig文件,那会非常棒。


1
当您想要包含其他模板时,需要使用include函数。更多重用代码的方法可以在这里找到。 - DarkBee
6个回答

6
您可以选择以下方法之一:
  • 如 @bogalakon 所指出的,在控制器/common/header上,将Twig渲染模板的名称更改为其他名称(最好通过ocmod完成此操作,以便将来的OpenCart更新不会覆盖您的修改)。
  • 或在Twig层次结构中包含另一个模板。
即:

You can either:

{{ 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 文档


3

我还没有学习过OpenCart 3.x,但我猜想你需要进行更改。

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

为了

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

catalog/controller/common/header.php中。

2
为了通过{{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)); '

2
要添加自己的自定义twig文件并将其包含在另一个现有文件中,您需要执行三个操作:
  1. 创建实际的自定义twig文件。 在您的情况下,它将是: catalog/view/theme/customtheme/template/common/header_home.twig
  2. 为该twig文件创建控制器。在您的情况下,您可以复制: /catalog/controller/common/header.php并将其重命名为header_home.php。编辑此控制器并将类名称更改为ControllerCommonHeaderHome,通常在第2行。
  3. 最后,由于您将在home.twig中包含header_home,请编辑/catalog/controller/common/home.php并在$data['header'] = $this->load->controller('common/header');之后添加以下行:$data['header'] = $this->load->controller('common/header_home');
就是这样。完成上述步骤后,您现在可以在home.twig中包含{{ header_home }}。如果您直接编辑文件,我发现有时需要登录到网站的管理员,转到设计>主题编辑器,打开我添加或更改的文件,点击重置,然后保存。刷新您的网站,您应该会看到更改。

1

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

例如:

考虑控制器

$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}}。

1
@bogalakon的回答是正确的,但如果您更新OpenCart核心文件,将会丢失更改。因此,我建议您复制header.php控制器文件并将其重命名为header_home.php,然后编辑该文件并替换该行。
return $this->load->view('common/header', $data);

使用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接