采用以下树结构:
├───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
正如你所看到的,文件周围散布着一堆文件.twig.
我想渲染文件base / 0001 / pages / file_content.twig的内容.
但是,我希望以下文件可以更改块内的内容:
> ext /< ...> /pages/0001/file.twig
> ext /< ...> /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
文件库/ 0001 / pages / file_content.twig具有以下内容:
{% block page_file %}
{% block title %}
Nice title
{% endblock %}{% block price %}{% endblock %}
{% endblock %}
文件库/ ext / store / pages / 0001 / file.twig具有以下内容:
{% block price %}55 €{% endblock %}
文件pages / file.twig有:
{% block title %}{{ parent() }}
{% endblock %}
{% block price %}
我期望的输出如下:
Nice title
但是使用该代码,所有其他文件的更改都被忽略,输出只有以下内容:
Nice title
注意:
重要的是要注意我正在使用Twig 1.33.2,并使用Twig_Autoloader :: register();方法.
我不能使用Twig 2.x,因为它需要PHP 7.0并且我仅限于PHP 5.3.29.