Drupal 8 包含部分模板

4
我正在尝试使用Drupal 8,自己的主题,并基于我的需求的大结构差异,我有一个page--front.twig.html和一个page.twig.html。我想创建模板部分,如phrozn或普通Symfony2项目中使用的footer.html.twig和header.html.twig。这些模板保存在子目录/parts/下。
但是当我像平常一样调用这些模板时,我只收到一个带有模板名称的字符串。
例如:
{# in page.html.twig or page--front.html.twig #}
{% include 'parts/footer.html.twig' %} 

返回文件名作为字符串:
parts/footer.html.twig

可以使用Drupal 8来实现这个吗?
3个回答

5
您可以像这样包含模板文件的任何部分。
{% include directory ~ '/parts/footer.html.twig' %}

或者这个

{% include '@mytheme/parts/footer.html.twig' %}

我强烈建议您为页面创建一个可重复使用的布局,这将使您在处理更多页面和变体时更加灵活。

{# filename: page-layout.html.twig #}

{% block content%}
{{ page.content }}
{% endblock%}

{% block footer%}
{% include '@mytheme/parts/footer.html.twig' %}
{% endblock%}

所以您可以在另一页中做类似以下这样的事情。
{# filename: page--front.html.twig #}
{% block footer%}
<div> I want to handle a different footer in here</div>
{% endblock%}

最后,我发现挖掘建议数组并查看Drupal尝试使用的内容非常有帮助。

祝好。


1
你的回复中的 directory ~ 部分非常有用,谢谢。 - kevpoccs

4

1

你能否为http://drupal.stackexchange.com/questions/141066/drupal-8-include-part-template写一个答案,可能会更加详细? - apaderno
@kiamlaluno 当然。谢谢。 - Yuseferi
当我使用类似于这样的代码:{% include 'site-header.html.twig' %}时,Twig会抛出错误“Twig_Error_Loader: Template "site-header.html.twig" is not defined”。虽然使用@themename/site-header.html.twig可以解决问题,但我觉得它很丑陋,而且phpstorm无法解析它。 - jmwierzbicki

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