模板

载入模板

{% 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 %}

symfony中twig的模板载入的更多相关文章

  1. symfony中twig的模板过滤器

    过滤器 变量可以被过滤器修饰.过滤器和变量用(|)分割开.过滤器也是可以有参数的.过滤器也可以被多重使用. 通用过滤器 date过滤器 1.1版本新增时区支持,1.5版本增加了默认的日期格式.格式化时 ...

  2. symfony中twig的模板变量与注释

    程序会传递给模板若干变量,你需要在模板里输出他们.例如输出$hello .1{{ hello }}.如果传递给模板的是对象或者数组,你可以使用点. 来输出对象的属性或者方法,或者数组的成员.或者你可以 ...

  3. symfony中twig的流程控制if,for用法

    流程控制 if 语句 if语句在twig中的作用如同if语句在PHP中的一样.1.你可以通过下面这个简单的例子来判断表达式的结果是否正确. {% if online == false %} <p ...

  4. VS2013中的MVC5模板部署到mono上的艰辛历程

    部署环境:CentOS7 + Mono 3.10 + Jexus 5.6 在Xamarin.Studio创建的asp.net项目,部署过程非常顺利,没有遇到什么问题:但在VS2013中创建的asp.n ...

  5. VS2012中丢失ArcGIS模板的解决方法

    VS2012中丢失ArcGIS模板的解决方法 由于ArcGIS10.0(for .NET)默认是用VS2010作为开发工具的,所以在先安装VS2012后装ArcGIS10.0 桌面版及ArcObjec ...

  6. 在RichFaces中使用Facelets模板

    在RichFaces中使用Facelets模板 目录 Facelets简介 Facelets标签 创建相应文件 Facelets简介 Facelets是用来构建JSF应用程序的默认视图技术.它为表现层 ...

  7. Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构

    分享两篇Win 10应用开发的XML文档结构:Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构. Win 10 开发中Adapt ...

  8. 在express站点中使用ejs模板引擎

    在express站点中使用ejs模板引擎 文/玄魂 目录 在express站点中使用ejs模板引擎 前言 1.1         安装 1.2修改app.js 1.3创建测试页面 前言 使用 vs创建 ...

  9. WPF 中获取DataGrid 模板列中控件的对像

    WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...

随机推荐

  1. MySQLdb模块操作

    Linux 安装mysql: apt-get install mysql-server 安装python-mysql模块:apt-get install python-mysqldb Windows ...

  2. instruments 教程

    https://www.raywenderlich.com/97886/instruments-tutorial-with-swift-getting-started

  3. Java基础之处理事件——使窗口处理自己的事件(Skethcer 1 handing its own closing event)

    控制台程序. 为表示事件的常量使用标识符可以直接启用组件对象的特定事件组.调用组件的enableEvent()方法,并把想要启用事件的标识符传送为参数,但这只在不使用监视器的情况下有效.注册监听器会自 ...

  4. Leetcode: Range Sum Query - Mutable && Summary: Segment Tree

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...

  5. 源码搭建LNMP

      源码安装LNMP 作者:尹正杰   版权声明:原创作品,谢绝转载!否则将追究法律责任.       欢迎加入:高级运维工程师之路 598432640 前言:非常简单的一个平台LNMP,在生产实际环 ...

  6. 刨根问底U3D---关于Delegate的方方面面

    我是否需要阅读这篇文章 Code1: private delegate void BloodNumDelegate (); public delegate void ExpNumChangeDeleg ...

  7. As3 Anchored Container 代码设置锚点旋转

    原文地址:http://jamesvango.co.uk/blog/?p=136

  8. zoj The 12th Zhejiang Provincial Collegiate Programming Contest Convert QWERTY to Dvorak

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5502  The 12th Zhejiang Provincial ...

  9. ACM/ICPC竞赛

    ACM知识点分类   第一类:基础算法 (1) 基础算法:枚举,贪心,递归,分治,递推,构造,模拟 (2) 动态规划:背包问题,树形dp,状态压缩dp,单调性优化,插头dp (3) 搜索:dfs,bf ...

  10. Java基础(10):java基础第一部分综合测试题,成绩合法性校验与排序

    题目: 编写一个 JAVA 程序,实现输出考试成绩的前三名 要求: 1. 考试成绩已保存在数组 scores 中,数组元素依次为 89 , -23 , 64 , 91 , 119 , 52 , 73 ...