• symfony中twig的模板载入


    模板

    载入模板

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

  • 相关阅读:
    JdbcTemplate增删改查案例
    顾问和注解
    使用多种方式实现AOP
    面试题
    Spring Bean的生命周期和作用域
    IOC和AOP交互拓展(二)
    AOP
    错题
    Spring核心概念
    hadoop-MapReduce框架原理之OutputFormat数据输出
  • 原文地址:https://www.cnblogs.com/phpxuetang/p/5669757.html
Copyright © 2020-2023  润新知