我想在我的布局新值中注入样式和脚本块,但是来自嵌入块。
当然它会引发错误Calling "parent" outside a block is forbidden.
。
有没有解决方法?
layout.html.twig:
<!DOCTYPE html>
<html>
<head>
{% block style %}
<link rel="stylesheet" href="foo.css">
{% endblock %}
</head>
<body>
{% block content "" %}
{% block scripts %}
<script src="foo.js"></script>
{% endblock %}
</body>
</html>
list.html.twig:
{% extends 'layout.html.twig' %}
{% block content %}
{% embed datatable.html.twig %}
{% block tbody %}
<tr>
<td>my awesome table</td>
</tr>
{% endblock %}
{% endembed %}
{% endblock %}
datatable.html.twig:
<table id="myDatatable">
<tbody>
{% block tbody "" %}
</tbody>
</table>
{% block styles %}
{{ parent() }}
<link rel="stylesheet" href="dataTables.css">
{% endblock %}
{% block scripts %}
{{ parent() }}
<script src="dataTables.js"></script>
{% endblock %}
(我不能/不会在scripts
中使用块styles
和list.html.twig
。它们是数据表模板的一部分,在定义主题时不会有任何感觉。 list.html.twig
)。
遗憾的是我不能使用use
因为这个函数不支持动态属性,只支持字符串。
因为use语句的解析与传递给模板的上下文无关,所以模板引用不能是表达式。
答案 0 :(得分:2)
正如评论中所说,include / embeds不能改变其包含者的块。 也就是说有一个扩展可以解决你的问题。
可以找到此Deferred Twig Extension
here
基本上,节点推迟执行所述块。 这样您就可以创建一个包含所有javascript链接并输出它们的变量。这可以在github上找到的advanced示例中看到。
为Eugene Leonovich提供此延期