Динамический оператор {% use%} в ветке? - PullRequest
1 голос
/ 22 ноября 2011

Я хочу добиться следующего:

У меня есть базовый шаблон для всех моих страниц, который называется "_page_base.twig".Он содержит верхний и нижний колонтитулы.

Тогда у меня есть шаблон для разных областей страницы: "topic.twig", "section.twig" и "article.twig" - каждая из них расширяет "_page_base.twig ", пока все хорошо.

Теперь я хочу написать свои статьи.Я также хотел бы сохранить их как файл .twig, поскольку я могу отредактировать полную разметку в своем редакторе и просто загрузить ее.

Поскольку я не могу сказать, что файлы моей статьи просто расширяются "article.twig"(множественное наследование невозможно) Я мог бы сказать" article.twig ", что он должен использовать блоки из моих разных веток файлов со статьями.Проблема в том, что операторы «use» должны быть жестко закодированы!

Мое текущее решение - добавить {% use "[PLACEHOLDER]" %} в «article.twig», а затем загрузить шаблон в строку, заменив заполнитель на правильныйarticle-content.twig, а затем передать все это движку шаблонов.Какой беспорядок.

Ребята, есть идеи для лучшего решения?

Ответы [ 3 ]

1 голос
/ 28 августа 2012

Вы можете попробовать включить тег. Так как этот тег принимает динамический шаблон имени для включения, вам просто нужно определить переменную, которая содержит имя шаблона ветки статьи.

{# on article.twig#}

{% set articles = ['someArticle.twig', ...] %}
{% for article in articles %}
    {% include article %}
{% endfor %}

{# on someArticle.twig #}
... Article text ...

В случае, если вам нужно настроить некоторый контент внутри someArticle.twig, вы можете установить следующий уровень: тег embed. Вы должны определить тег блока внутри someArticle.twig, этот блок будет заполнителем пользовательских значений.

{# on article.twig#}

{% set articles=['someArticle.twig', ...] %}
{% for article in articles %}
    {% embed article %}
        {% block inside_text_article %}
            ... custom text ...
        {% endblock %}
    {% endembed %}
{% endfor %}


{# on someArticle.twig #}
    ... article text ...
    {% block inside_text_article %}default values{% endblock %}
    ... article text ...
0 голосов
/ 29 июля 2012

Если я не понимаю вопроса, для отображения одной статьи требуется только расширение __page_base.twig.

В случае, если вам необходимо отобразить несколько статей, вы можете иметь шаблон, предназначенный для отображения списка статей, который также расширит __page_base.twig и передаст список статей этому шаблону.

0 голосов
/ 15 марта 2012

https://github.com/fabpot/Twig/issues/17 - нет динамических пространств имен

Решение может быть LiipThemeBundle: http://symfony2bundles.org/liip/LiipThemeBundle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...