我想实现以下目标:
我的所有网页都有一个基本模板,名为“_page_base.twig
”。它包含页眉和页脚。
然后我在页面的不同区域有一个模板:“topic.twig
”,“section.twig
”和“article.twig
” - 每个区域都扩展了“_page_base.twig
“那到目前为止运作良好。
现在我想写我的文章。我也希望将它们保存为.twig文件,因为我可以在编辑器中编辑完整的标记,然后上传它。
由于我不能说我的文章文件只是扩展“article.twig
”(多重继承是不可能的)我可以告诉“article.twig
”它应该使用我不同文章中的块 - 内容twigfiles。
问题是:“使用”语句必须硬编码!
我目前的解决方案是将{% use "[PLACEHOLDER]" %}
添加到“article.twig
”中,然后将模板加载到字符串中,将占位符替换为正确的article-content.twig,然后将整个内容传递给模板引擎。真是一团糟。
你们有没有想过更好的解决方案?
答案 0 :(得分:1)
您可以尝试使用include标记。由于此标记接受要包含的动态名称模板,因此您只需要定义一个包含文章树枝模板名称的变量。
{# 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 ...
答案 1 :(得分:0)
https://github.com/fabpot/Twig/issues/17 - 没有动态命名空间
LiipThemeBundle可能是一个解决方案: http://symfony2bundles.org/liip/LiipThemeBundle
答案 2 :(得分:0)
除非我不理解这个问题,否则显示一篇文章只需要扩展__page_base.twig。
如果您需要显示多篇文章,您可以拥有一个专门用于显示文章列表的模板,这些文章也会扩展__page_base.twig并将文章列表传递给此模板。