symfony中twig的模板载入
2016-07-14 11:18
871 查看
模板
载入模板
{% include ‘sidebar.html’ %}
当前模板的变量也会传递到 被include的模板里,在那里面可以直接访问你这个模板的变量。
{% for comment in comments %} {% set user = users[comment.userId] %} {% include ‘TopxiaWebBundle:CommentWidget:item.html.twig’ %} {% endfor %}
在item.html.twig是可以访问 comment变量的,加入其他参数user可以使被载入的模板只访问部分变量。
你可以给模板添加变量
{% include ‘TopxiaWebBundle:Course:countdown.html.twig’ with {‘course’:course} %}
你也可以使用 only 关键字 来禁止载入的模板使用当前模板的变量,只能使用include 时with的变量
{% include ‘TopxiaWebBundle:Course:countdown.html.twig’ with {‘course’:course} only %}
载入的模板名也可以是一个twig表达式
{% include name==’chapter’? ‘TopxiaWebBundle:LiveCourseReplayManage:chapter-item.html.twig’: ‘TopxiaWebBundle:LiveCourseReplayManage:list-item.html.twig’ %}
在模板加上 ignore missing 关键字,这样当模板不存在的时候就不会引发错误。
{% include “sidebar.html” ignore missing %} {% include “sidebar.html” ignore missing with {‘foo’: ‘bar} %} {% include “sidebar.html” ignore missing only %}
可以给include传递一个数组,他会自动载入第一个存在的模板。
{% include [ ‘@customize/content/’ ~ type ~ ‘/show.html.twig’, ‘TopxiaWebBundle:Content:’ ~ type ~ ‘-show.html.twig’ ] %}
模板继承
TWIG中最有用到功能就是模板继承,他允许你建立一个“骨骼模板”,然后你用不同到block来覆盖父模板中任意到部分。而且使用起来非常到简单。我们先定义一个基本骨骼页layout.html.twig 他包含许多block块,这些都可以被子模板覆盖。
{% block topbanner %}{% endblock %} {% block content %} {{ render(controller(‘TopxiaWebBundle:User:headerBlock’, {user:user})) }} <div class=”es-row-wrap container-gap userpage-body”> <ul class=”nav nav-pills userpage-nav clearfix”> {% if ‘ROLE_TEACHER’ in user.roles %} <li {% if pageNav == ‘teach’ %}class=”active”{% endif %}> <a href=”{{ path(‘user_teach’, {id: user.id}) }}”>在教课程</a></li> {% endif %} <li {% if pageNav == ‘learn’ %}class=”active”{% endif %}> <a href=”{{ path(‘user_learn’, {id:user.id}) }}”>在学课程</a></li> <li {% if pageNav == ‘favorited’ %}class=”active”{% endif %}> <a href=”{{ path(‘user_favorited’, {id:user.id}) }}”>收藏的课程</a></li> <li {% if pageNav == ‘group’ %}class=”active”{% endif %}> <a href=”{{path(‘user_group’,{id:user.id})}}”>加入的小组</a></li> <li {% if pageNav == ‘friend’ %}class=”active”{% endif %}> <a href=”{{ path(‘user_following’, {id:user.id}) }}”>关注/粉丝</a></li> </ul> {% block main %}{% endblock %} </div> {% endblock %} {% block footer %}{% endblock %}
我们定义了4个block块,分别是 block topbanner, block content, block main,block footer
注意 1、block是可以嵌套的。 2、block可以设置默认值(中间包围的内容),如果子模板里没有覆盖,那就直接显示默认值。 比如block footer ,大部分页面你不需要修改(省力),但你需要到时候仍可以方便到修改。
子模板定义index.html.twig
{% extends ‘TopxiaWebBundle:Default:layout.html.twig’ %} {% block topbanner %} <div id=”autumn-carousel” class=”carousel” data-ride=”carousel”> … </div> {% endblock %} {% block content %} <div class=”row”> <div class=”col-md-8”> {# 推荐课程 #} ..... </div> <div class=”col-md-4”> {# 在学课程 #} ..... </div> </div> {% endblock %}
注意 {{% extends ‘TopxiaWebBundle:Default:layout.html.twig’ %} 必须是第一个标签。
其中 block footer就没有定义,所以显示父模板中设置的默认值
如果你需要增加一个block的内容,而不是全覆盖,你可以使用 parent函数
{% block sidebar %} <h3>Table Of courses</h3> … {{ parent() }} {% endblock %}
[/code]
相关文章推荐
- 保证唯一的一种js提交数据方式,还不错
- 高性能服务开发之定时器
- HTML&CSS基础学习笔记1.11-导航栏
- 属性“GetModels”的值为 null、未定义或不是 Function 对象
- iOS app提交审核
- Android开发技术周报特刊之React Native
- JavaScript强化教程-JS面向对象编程
- dfs剪枝1
- pymongo 对游标进行for循环操作需要注意的问题
- symfony中twig的流程控制if,for用法
- 洛谷 P1079 Vigenère 密码
- 百度通过经纬度获取地址
- JAVA定时任务Quartz
- lua语言入门之Sublime Text设置lua的Build System
- 关于Shell脚本编程不得不知的几个细节
- QtQuick一分钟技巧:使用C++保存全局数据
- 关于qmail的笔记
- 安装mysql Install/Remove of the Service Denied!错误的解决办法
- 网络数据包检查,抓包形式
- 创建数据库并授权