📜  没有多个的drupal 8 twig (1)

📅  最后修改于: 2023-12-03 14:56:02.566000             🧑  作者: Mango

没有多个的 Drupal 8 Twig

当我们使用 Drupal 8 作为我们的 CMS 时,Twig 模板引擎是默认的主题引擎。在 Twig 中,我们使用“块”来定义可重用的模板片段和布局,并使用“继承”来扩展现有的模板和引用其他模板。在本文中,我们将研究如何使用 Twig 的“块”和“继承”来创建模板和主题,以及如何在 Drupal 8 CMS 中为自定义的块创建模板。

Twig 的块和继承

Twig 的“块”是用与 PHP 中的函数类似的语法来定义的。块是可重用的代码片段,可以在模板中使用,并在需要时被替换。例如:

{% block header %}
  <header class="site-header">
    <div class="container">
      <h1><a href="{{ path('home') }}">{{ site_name }}</a></h1>
    </div>
  </header>
{% endblock %}

这个块被命名为“header”,它包含了一个用来展示站点名称的<h1>标签。现在,我们可以在其他模板中继承这个块并在需要时修改它。

继承是另一个重要的元素,允许我们创建一个模板并在需要时使用其他模板来扩展它。例如:

{% extends "theme.html.twig" %}

{% block header %}
  <!-- 更改 header 的代码 -->
{% endblock %}

{% block content %}
  <!-- 添加新的内容 -->
{% endblock %}

在上面的例子中,我们创建了一个扩展自“theme.html.twig”的模板,并修改了名为“header”和“content”的块中的代码。在实际使用中,我们可以在我们的自定义模板中继承另一个模板,并使用它来扩展我们自己的模板。

Drupal 8 中的块和模板

在 Drupal 8 中,我们可以使用钩子函数创建自定义块。钩子函数是用于与系统交互的函数,可以在编写模块时使用。例如,在模块中,我们可以使用 hook_theme 创建一个自定义块。

function mymodule_theme($existing, $type, $theme, $path) {
  return array(
    'mymodule_block' => array(
      'variables' => array(
        'content' => NULL,
      ),
      'template' => 'mymodule-block',
    ),
  );
}

在上面的例子中,我们定义了一个名为“mymodule_block”的变量,并将其传递给了一个名为“mymodule-block”的模板。现在我们可以在我们的主题模板中使用这个变量并渲染这个块了。

{% block content %}
  {% for block in page.sidebar %}
    {% if block['#type'] == 'mymodule_block' %}
      {% include '@mytheme/mymodule-block.html.twig' with {'content': block['#content']} %}
    {% endif %}
  {% endfor %}
{% endblock %}

在我们的 page.html.twig 模板中,我们循环了所有的侧边栏块,并检查是否有一个类型为“mymodule_block”的块。如果是,我们包含了一个使用“mymodule_block”变量的模板,并将数据传递给它。

结论

Twig 的“块”和“继承”使我们能够创建可重用的模板和布局,并且在 Drupal 8 CMS 中,我们可以使用钩子函数和模板来创建我们自己的自定义块。这个功能非常有用,并且可以大大减少重复编写和维护代码的时间和努力。