📅  最后修改于: 2023-12-03 14:56:02.566000             🧑  作者: Mango
当我们使用 Drupal 8 作为我们的 CMS 时,Twig 模板引擎是默认的主题引擎。在 Twig 中,我们使用“块”来定义可重用的模板片段和布局,并使用“继承”来扩展现有的模板和引用其他模板。在本文中,我们将研究如何使用 Twig 的“块”和“继承”来创建模板和主题,以及如何在 Drupal 8 CMS 中为自定义的块创建模板。
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 中,我们可以使用钩子函数创建自定义块。钩子函数是用于与系统交互的函数,可以在编写模块时使用。例如,在模块中,我们可以使用 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 中,我们可以使用钩子函数和模板来创建我们自己的自定义块。这个功能非常有用,并且可以大大减少重复编写和维护代码的时间和努力。