【问题标题】:OpenCart 3.x - including a new template fileOpenCart 3.x - 包括一个新的模板文件
【发布时间】:2017-08-07 08:41:30
【问题描述】:

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

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

【问题讨论】:

  • 当您想要包含其他模板时,您需要使用include 函数。更多代码复用方法可以找到here

标签: twig opencart opencart-3


【解决方案1】:

您可以:

  • 正如@bogalakon 指出的那样,在控制器/公共/标题中的 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

【讨论】:

    【解决方案2】:

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

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

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

    catalog/controller/common/header.php.

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        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-&gt;load-&gt;controller('common/header_home'); 之后添加行$data['header'] = $this-&gt;load-&gt;controller('common/header');

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

        【讨论】:

          【解决方案5】:

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

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

          与:

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

          【讨论】:

            【解决方案6】:

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

            例如:

            考虑控制器

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

            【讨论】:

              猜你喜欢
              • 2010-10-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-02-08
              • 1970-01-01
              相关资源
              最近更新 更多