【发布时间】:2017-10-13 23:39:39
【问题描述】:
采用如下树形结构:
├───base
│ ├───0001
│ │ └───pages
│ │ file.twig
│ │ file_content.twig
│ └───ext
│ └───store
│ │ └───pages
│ │ └───all
│ │ │ file.twig
│ │ └───0001
│ │ file.twig
│ └───newsletter
│ └───pages
│ └───all
│ │ file.twig
│ └───0001
│ file.twig
└───pages
│ file.twig
└───0001
file.twig
如您所见,周围散落着大量file.twig。
我想渲染文件base/0001/pages/file_content.twig的内容。
但是,我希望以下文件可以更改块内的内容:
ext/<...>/pages/0001/file.twigext/<...>/pages/all/file.twig/pages/0001/file.twig/pages/file.twig
但是,这些文件可能存在也可能不存在,可能需要也可能不需要,并且必须能够更改任何块的内容。
有什么办法可以做到吗?
到目前为止,我有以下内容:
{% embed 'base/pages/file_content.twig' %}
{% block page_file %}
{{ parent() }}
{% if data.store_enabled %}
{% include [
'base/ext/store/pages/0001/file.twig',
'base/ext/store/pages/all/file.twig'
] ignore missing
%}
{% endif %}
{% include ['pages/0001/file.twig', 'pages/file.twig'] ignore missing %}
{% endblock %}
{% endembed %}
这“有效”,因为它呈现页面但不允许覆盖任何块。
我怎样才能做到这一点?
作为一个例子,考虑这种文件结构(是的,文件丢失了,这是意料之中的):
├───base
│ ├───0001
│ │ └───pages
│ │ file.twig
│ │ file_content.twig
│ └───ext
│ └───store
│ │ └───pages
│ │ └───0001
│ │ file.twig
└───pages
file.twig
文件base/0001/pages/file_content.twig有以下内容:
{% block page_file %}
{% block title %}<h1>Nice title</h1>{% endblock %}
{% block price %}{% endblock %}
<div class="clearfix"></div>
{% endblock %}
文件base/ext/store/pages/0001/file.twig有以下内容:
{% block price %}<span class="price">55 €</span>{% endblock %}
而文件pages/file.twig 有:
{% block title %}{{ parent() }}<hr>{% endblock %}
{% block price %}<div>{{ parent() }}</div>{% endblock %}
我期望的输出如下:
<h1>Nice title</h1><hr>
<div><span class="price">55 €</span</div>
<div class="clearfix"></div>
但是使用该代码,所有其他文件的更改都将被忽略,输出仅如下:
<h1>Nice title</h1>
<div class="clearfix"></div>
注意:
请务必注意,我正在使用 Twig 1.33.2,并使用 Twig_Autoloader::register(); 方法。
我不能使用 Twig 2.x,因为它需要 PHP 7.0+ 而我只能使用 PHP 5.3.29。
【问题讨论】:
-
ignore missing也可用于嵌入节点 -
@DarkBee 但是你只能嵌入1个文件,而
use不允许任何ignore missing -
只包含一个嵌入是什么意思?当前设置将包括第一个找到的模板并显示它?如果您的意思是在嵌入中放置一个嵌入,那么这是可能的,请参阅here
-
@DarkBee 让我试试
-
@DarkBee 我很难弄清楚如何使用它。但是,我认为一个例子应该会有所帮助?
标签: php twig template-engine