【问题标题】:Include then block on a Twig template在 Twig 模板上包含然后阻止
【发布时间】:2013-05-08 16:42:50
【问题描述】:

之前的问题似乎都没有任何信息,大约一天半的随机 Google 搜索结果一无所获。

我要做的是,我有一个 base.html.twig 模板,然后是一个包含多个 ui 元素(幻灯片、导航菜单等)的文件夹。我的想法是我应该能够做到这一点:

page.html.twig 包含

{% extends 'OnMyLemonCommonBundle::base.html.twig' %}

{% block content %}

  {% include 'OnMyLemonCommonBundle::features.html.twig' %}

  {% block features %}

    <h2>Featured Articles</h2>

    <li><a href="#">Article 1</a></li>
    <li><a href="#">Article 2</a></li>

  {% endblock %}

{% endblock %}

features.html.twig 包含

<div class="row">
  <div class="large-12 columns">
    <div class="row">

      <div class="large-4 small-6 columns">
        {% block features %}{% endblock %}
      </div>

      <div class="large-4 small-6 columns">
        {% block blogs %}{% endblock %}
      </div>

      <div class="large-4 small-12 columns">
        {% block pictures %}{% endblock %}
      </div>

    </div>
  </div>
</div>

问题是这会呈现如下:

// Content from top of base.html.twig

<div class="row">
  <div class="large-12 columns">
    <div class="row">

      <div class="large-4 small-6 columns">
      </div>

      <div class="large-4 small-6 columns">
      </div>

      <div class="large-4 small-12 columns">
      </div>

    </div>
  </div>
</div>

<h2>Featured Articles</h2>

<li><a href="#">Article 1</a></li>
<li><a href="#">Article 2</a></li>

// Content from bottom of base.html.twig

问题是如何使输出如下:

// Content from top of base.html.twig

<div class="row">
  <div class="large-12 columns">
    <div class="row">

      <div class="large-4 small-6 columns">

        <h2>Featured Articles</h2>

        <li><a href="#">Article 1</a></li>
        <li><a href="#">Article 2</a></li>

      </div>

      <div class="large-4 small-6 columns">
      </div>

      <div class="large-4 small-12 columns">
      </div>

    </div>
  </div>
</div>

// Content from bottom of base.html.twig

【问题讨论】:

    标签: symfony twig template-inheritance


    【解决方案1】:

    您可以通过在 twig 文件中添加额外的继承层来实现此目的,例如:

    features-base.html.twig 包含:

    {% extends 'OnMyLemonCommonBundle::base.html.twig' %}
    
    {% block content %}
    
      {% include 'OnMyLemonCommYonBundle::features.html.twig' %}
    
    {% endblock %}
    

    page.html.twig 包含:

    {% extends 'OnMyLemonCommonBundle::features-base.html.twig' %}
    
    {% block features %}
    
      <h2>Featured Articles</h2>
    
      <li><a href="#">Article 1</a></li>
      <li><a href="#">Article 2</a></li>
    
    {% endblock %}
    

    【讨论】:

      【解决方案2】:

      我认为这是不可能的,但是您可以尝试使用以下方法

      {% render'bundle:Controller:method' %}
      

      你在哪里渲染它

      <div class="row">
        <div class="large-12 columns">
          <div class="row">
      
            <div class="large-4 small-6 columns">
                {{ features }}
            </div>
      
            <div class="large-4 small-6 columns">
            </div>
      
            <div class="large-4 small-12 columns">
            </div>
      
          </div>
        </div>
      </div>
      

      我希望这能解决您的问题

      【讨论】:

      • 它在一定程度上确实有效,但是我们遇到了输出被转义的问题,如下&amp;lt;h1&amp;gt;Welcome&amp;lt;/h1&amp;gt;&amp;lt;hr&amp;gt;
      • 好的,我使用{% autoescape false %}{% endautoescape %}修复了这个问题
      • 也可以使用过滤器|raw,像这样{{ featurename|raw }}
      猜你喜欢
      • 2018-04-06
      • 1970-01-01
      • 2012-12-25
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多