有没有办法包含模板并隐藏他的一些块

时间:2012-05-21 13:15:32

标签: symfony

也许这个问题可以转化为两个问题:

如果我在.html.twig中包含了一个模板,我可以控制显示或隐藏所包含树枝中的某些块吗?

我可以从几个树枝布局延伸一根树枝吗?

4 个答案:

答案 0 :(得分:3)

我不确定这是你在找什么,你的描述有点含糊,所以我会坚持这个问题。

您可以使用中间的模板解决此问题。

您不能直接包含模板并修改其块AFAIK,但您可以创建第二个模板,扩展第一个并删除块,然后包含第二个模板你需要的地方。

假设这是您最初要包含的模板:

<div>
    This is the template you want to include (articleDetails.html.twig)
    {% block article %}
        This is some content you want to delete
    {% endblock article %}
</div>

您可以尝试创建第二个模板,将其扩展为:

{% extends 'articleDetails.html.twig' %}

{# This is template emptyArticle.html.twig, it deletes the article block #}
{% block article %}
{% endblock article %}

然后,您可以包含第二个模板(emptyArticle),而不是包含articleDetails,并且您将获得第一个内容但没有文章块的内容。 您可以使用任意数量的块来执行此操作。

答案 1 :(得分:3)

我和一位同事刚刚发现了一个很酷的东西,它与这个问题有某种联系。

例如,如果您想在调用renderBlock(Twig方法)方法时渲染块而不是在扩展模板时渲染块,则可以使用此技巧。

{% if false %} {% block subject %} subject_message {% endblock %} {% endif %}

当您致电renderBlock时(例如此处 - &gt; https://stackoverflow.com/a/7580461/922165),此块将被呈现,因为该方法不关心其他语句。

但是,当你扩展时 - 这个区块将永远不会显示。

当您拥有其他电子邮件模板正在扩展的基本默认电子邮件模板时,这会很有用。您可以在块中包装一些默认的电子邮件主题,并且不需要在其他模板上显示此块。

答案 2 :(得分:1)

这是过期的过期日期&#39;这个问题,但如果其他人可能有一个类似的问题,我通过在包含的模板中使用twig变量解决了这个问题。

{% set myConditionalBlockToShow %}
    <span>some interesting things {{ withVariable }}</span>
{% endset %}

{% if myCondition %}
    {{ myConditionalBlockToShow }}
{% endif %}

答案 3 :(得分:0)

您可以在包含

中传递变量
{% include 'template.html' with {'foo': 'bar'} %}

在template.html中,您检查'foo'的值并根据值显示/隐藏您的块

或者如果你有更复杂的模板,你可以拆分它们并在控制器中调用它们。

{% render url('latest_articles', { 'view': 2 }) %}

public function recentArticlesAction($view = 1) {
    // make a database call or other logic
    // to get the "$max" most recent articles
    $articles = ...;

    if($view == 2) {
        return $this->render(
           'AcmeArticleBundle:Article:recentList.html.twig',
            array('articles' => $articles)
        );
    }
    return $this->render(
        'AcmeArticleBundle:Article:recentList2.html.twig',
        array('articles' => $articles)
    );
}

http://symfony.com/doc/current/book/templating.html#embedding-controllers