[英]Twig extend template on condition
我使用Symfony 2和Twig,我的问题很简单:
在视图中,我想基于变量扩展其中一个布局。 如果变量为false
我想扩展UdoWebsiteBundle::layout.html.twig
,如果它是true
我想扩展UdoWebsiteBundle::layout_true.html.twig
。
这是我试过的代码:
{% block layout_extender %}
{% if intro == 'false' %}
{% extends 'UdoWebsiteBundle::layout.html.twig' %}
{% else %}
{% extends 'UdoWebsiteBundle::layout_true.html.twig' %}
{% endif %}
{% endblock %}
我收到此错误:
第7行的“UdoWebsiteBundle:home:home.html.twig”中禁止使用多个扩展标记
有没有其他方法来实现这一目标?
试试这个:
{% extends intro == 'false'
? 'UdoWebsiteBundle::layout.html.twig'
: 'UdoWebsiteBundle::layout_true.html.twig' %}
从这里获取的想法: http : //jorisdewit.ca/2011/08/27/extending-different-layouts-for-ajax-requests-in-twig-symfony2/
为了保持整洁,您应该使用Twig动态继承支持,方法是使用控制器中定义的变量作为基本模板:
{% extends parent_template_var %}
如果变量求值为Twig_Template对象,则Twig将使用它作为父模板。
在控制器中定义parent_template_var :
if($intro == 'false')
$parent_template_var = 'UdoWebsiteBundle::layout.html.twig';
}else{
$parent_template_var = 'UdoWebsiteBundle::layout_true.html.twig';
}
return $this->render('::/action.html.twig', array('parent_template_var' => $parent_template_var ));
从官方文件中回答:
条件继承
由于父模板的名称可以是任何有效的Twig表达式,因此可以使继承机制成为条件:
{% extends standalone ? "minimum.html" : "base.html" %}
在此示例中,如果独立变量的计算结果为true,则模板将扩展“minimum.html”布局模板,否则将扩展“base.html”。
这一切都是有意义的做这个模板或模板。
但让我描述另一种情况。 您有一个个人资料表单和一个表单,用户可以上传个人资料相关文档。 由于配置文件表单已经很长,文档已移动到新表单。
一切都很好。 现在我们要使用bootstrap选项卡来执行Profile | 用户友好的文件。
现在我知道因为我们使用两个单独的表单如果您提交文档,配置文件中的更改将无法保存,反之亦然。
我已经在选项卡中添加了文档表单
<div role="tabpanel" class="tab-pane" id="documents">
{{ render(controller('ManyAppBundle:Document:createDocument', {'viewOnly': true})) }}
</div>
'viewOnly':true是一个查询参数,操作不需要。
我现在的问题是,如果配置文件选项卡呈现文档模板,它必须只显示上传小部件和提交,当你直接进入文档页面时,它必须显示标题和侧栏以及所有内容。 所以我试过了
{% if not viewOnly %}
{% extends ... %}
{% endif %}
这给了问题,因为你不能在if中使用extends。 像你在其他答案中建议尝试使用
{% extends viewOnly == true ? ... %}
当viewOnly为false时,这解决了Twig问题直到执行代码。
当viewOnly为false时,它必须扩展所有其他模板使用的基本模板,但如果为true,我只想显示:
{{ form_start(form, { 'style': 'horizontal', 'col_size': 'sm' }) }}
{% if form.documents is defined %}
{{ form_row(form.documents) }}
{% endif %}
{{ form_row(form.submit, { 'attr': { 'class': 'btn btn-success' } }) }}
{{ form_end(form) }}
但现在有了顶级
{% extends viewOnly == true ? ... %}
如果viewOnly变为false,则失败并且模板“”无法找到。
有没有办法说延伸这个特定的模板,这将是不扩展任何模板的相同结果?
或者有没有办法说当viewOnly为true但在失败时没有发生任何事情?
你不能扩展多个模板,这就是你得到错误的原因,如果你愿意的话,你需要将它们推送到如下所示的数组中。
{% extends ['MyAppCustomBundle::Layout/layout.html.twig', 'FOSUserBundle::layout.html.twig'] %}
但是你需要使用Twig 1.2版来完成它。 树枝文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.