Мне нужно загрузить страницу, которая будет «вставлена» в шаблон - как я ее прочитал, Volt's Template Inheritance должен сделать трюк, и он ... kinda. Жестко запрограммированные значения, как показано в примерах, работают отлично - следующий пример работы:Наследовать динамический шаблон в воле Falcon
<!-- Template -->
<div id="site_content">
{% block test %}
{% endblock %}
</div>
и страницу, которая наследует шаблон:
{% extends "../../templates/de/index.volt" %}
{% block test %}
{{ content() }} {# this is a registered volt function that outputs the generated content #}
{% endblock %}
Однако та же страница может понадобиться наследовать другой шаблон, и это должно быть определено во время выполнения, поэтому имя шаблона должно генерироваться динамически. Мне предложили две опции:
- Задайте имя шаблона переменной и используйте его при расширении - проблема в том, что я не вижу способа использовать его впоследствии. That guy seems to have had the same problem, но нет ответа, как это сделать, ни подтверждения, что это невозможно вообще.
Зарегистрируйте еще одну функцию для создания полной строки (например, {% extends "../../templates/de/index.volt"%}), а затем скомпилируйте ее, например.
$ от компилятора> AddFunction ('get_template', функции ($ resolvedArgs, $ exprArgs) использовать ($ вольта) { возвращение $ вольт-> getCompiler() -> compileString ('{% распространяется».. /../templates/de/index.volt "%} '); });
и затем использовать эту функцию на странице, например.
{{ get_template() }}
{% block test %}
{{ content() }}
{% endblock %}
Однако, используя этот подход не анализирует содержимое страницы (например, содержание, возвращенное функцией Зарегистрированное содержание() не показан). Я также открыт для других решений (использование Twig вместо Volt - только последнее средство, для проблем с производительностью), советы о том, что я делаю неправильно, или указатели на полезные статьи по этой теме. Заранее спасибо!