目录
Index
{{ block('title') }}
Table Of Contents
首页 后端开发 php教程 Twig 的 tags学习(中文) 之二_PHP教程

Twig 的 tags学习(中文) 之二_PHP教程

Jul 13, 2016 pm 05:48 PM
bar set twig 中文 变量 学习 标签 赋值

set标签
主要是用来给变量赋值的。

 

 

{% set foo = 'foo' %} 
 
{% set foo = [1, 2] %} 
 
{% set foo = {'foo': 'bar'} %} 
 
{% set foo = 'foo' ~ 'bar' %} 
 
{% set foo, bar = 'foo', 'bar' %} 
{% set foo = 'foo' %}

{% set foo = [1, 2] %}

{% set foo = {'foo': 'bar'} %}

{% set foo = 'foo' ~ 'bar' %}

{% set foo, bar = 'foo', 'bar' %}
其中 'foo'~'bar' 这个我没怎么看明白,测试了一下,可能是字符串连接的。

set还有一种用法,就是把 块内的内容赋值给变量


{% set foo %} 
 

 
{% endset %} 
{% set foo %}
 
{% endset %}


extends标签
这个标签用来表示本模板继承自另外一个模板。和php一样,twig不支持多重继承,所以你只能有一个extends标签,而且要在模板的最上方。

我们先来定义一个“基模板” base.html 他就像一个骨架一个。


 
 
   

 
        {% block head %} 
             
            {% block title %}{% endblock %} - My Webpage 
        {% endblock %} 
     
     
       
{% block content %}{% endblock %}
 
         
     
 


   
        {% block head %}
           
            {% block title %}{% endblock %} - My Webpage
        {% endblock %}
   
   
       
{% block content %}{% endblock %}

       
   

{% block %}标签定义了4个区块(block head, block title, block content, block footer),可以让子模板来填充内容。block的作用就是告诉模板引擎,这里面的内容可以被子模板覆盖。

一个子模板大概类似于这样的


{% extends "base.html" %} 
 
{% block title %}Index{% endblock %} 
{% block head %} 
    {{ parent() }} 
     
{% endblock %} 
{% block content %} 
   

Index

 
   

 
        Welcome on my awesome homepage. 
   

 
{% endblock %} 
{% extends "base.html" %}

{% block title %}Index{% endblock %}
{% block head %}
    {{ parent() }}
   
{% endblock %}
{% block content %}
   

Index


   


        Welcome on my awesome homepage.
   


{% endblock %}
extends是非常关键的,它告诉模板引擎,本模板继承自另一个模板(base.html)。当模板引擎解析到本模板时,会首先载入父模板。extends标签应该是模板内的第一个标签。

如果子模板没有定义block footer ,那么父模板会用默认值代替。


注意:block标签的名字是不能重复的。如果你想让同一个block多次打印。可以使用block函数


{% block title %}{% endblock %} 

{{ block('title') }}

 
{% block body %}{% endblock %} 
{% block title %}{% endblock %}

{{ block('title') }}


{% block body %}{% endblock %}

父block
也许你会需要 父block的内容。可以使用parent函数,这很有用比如你想往一个block里添加内容而不是覆盖时。


{% block sidebar %} 
   

Table Of Contents

 
    ... 
    {{ parent() }} 
{% endblock %} 
{% block sidebar %}
   

Table Of Contents


    ...
    {{ parent() }}
{% endblock %}


命名endblock
模板引擎 允许你命名结束标记,这样可读性会提高很多。但个人觉得没啥用处。

{% block sidebar %} 
    {% block inner_sidebar %} 
        ... 
    {% endblock inner_sidebar %} 
{% endblock sidebar %} 
{% block sidebar %}
    {% block inner_sidebar %}
        ...
    {% endblock inner_sidebar %}
{% endblock sidebar %}

嵌套block
允许你嵌套生成block ,来形成更复杂的block


{% for item in seq %} 
   

  • {% block loop_item %}{{ item }}{% endblock %}
  •  
    {% endfor %} 
    {% for item in seq %}
       
  • {% block loop_item %}{{ item }}{% endblock %}

  • {% endfor %}


    简写block
    以下这两种写法是等效的


    {% block title %} 
        {{ page_title|title }} 
    {% endblock %} 
     
    {% block title page_title|title %} 
    {% block title %}
        {{ page_title|title }}
    {% endblock %}

    {% block title page_title|title %}

     


    动态继承
    你可以用一个变量来继承不同的模板。


    {% extends some_var %} 
    {% extends some_var %}
    如果变量是一个twig模板对象,也可以。


    $layout = $twig->loadTemplate('some_layout_template.twig'); 
     
    $twig->display('template.twig', array('layout' => $layout)); 
    $layout = $twig->loadTemplate('some_layout_template.twig');

    $twig->display('template.twig', array('layout' => $layout));
    1.2版本更新 你可以传递一个数组,twig会选择第一个存在的模板,来继承。


    {% extends ['layout.html', 'base_layout.html'] %} 
    {% extends ['layout.html', 'base_layout.html'] %}


    条件继承
    这个很简单自己看吧,


    {% extends standalone ? "minimum.html" : "base.html" %} 
    {% extends standalone ? "minimum.html" : "base.html" %}

     

    block标签
    参见 extends标签

     

     

    include标签
    载入一个模板,返回渲染的内容。载入的模板可以使用当前模板的变量{% include 'header.html' %} 
        Body 
    {% include 'footer.html' %} 
    {% include 'header.html' %}
        Body
    {% include 'footer.html' %}

    你可以给模板添加变量


    {# the foo template will have access to the variables from the current context and the foo one #} 
    {% include 'foo' with {'foo': 'bar'} %} 
     
    {% set vars = {'foo': 'bar'} %} 
    {% include 'foo' with vars %} 
    {# the foo template will have access to the variables from the current context and the foo one #}
    {% include 'foo' with {'foo': 'bar'} %}

    {% set vars = {'foo': 'bar'} %}
    {% include 'foo' with vars %}
    你也可以使用 only 关键字 来禁止载入的模板使用当前模板的变量,只能使用include 时with的变量{# only the foo variable will be accessible #} 
    {% include 'foo' with {'foo': 'bar'} only %} 
     
    {# no variable will be accessible #} 
    {% include 'foo' only %} 
    {# only the foo variable will be accessible #}
    {% include 'foo' with {'foo': 'bar'} only %}

    {# no variable will be accessible #}
    {% include 'foo' only %}

    载入的模板名也可以是一个twig表达式


    {% include some_var %} 
    {% include ajax ? 'ajax.html' : 'not_ajax.html' %} 
    {% include some_var %}
    {% include ajax ? 'ajax.html' : 'not_ajax.html' %}
    也可以用twig模板对象


    $template = $twig->loadTemplate('some_template.twig'); 
     
    $twig->loadTemplate('template.twig')->display(array('template' => $template)); 
    $template = $twig->loadTemplate('some_template.twig');

    $twig->loadTemplate('template.twig')->display(array('template' => $template));

    1.2版本新加内容,可以在模板加上 ignore missing 关键字,这样当模板不存在的时候就不会引发错误。

     

     

    {% include "sidebar.html" ignore missing %} 
    {% include "sidebar.html" ignore missing with {'foo': 'bar} %} 
    {% include "sidebar.html" ignore missing only %} 
    {% include "sidebar.html" ignore missing %}
    {% include "sidebar.html" ignore missing with {'foo': 'bar} %}
    {% include "sidebar.html" ignore missing only %}1.2版本新加内容,你可以给include传递一个数组,他会自动载入第一个存在的模板{% include ['page_detailed.html', 'page.html'] %} 
    {% include ['page_detailed.html', 'page.html'] %}

    import 标签


    twig允许把一些常用的代码放入到macros(宏)里,这些macros被不同的模板导入。

    有两种方法导入模板,你可以导入整个模板到一个变量里,或者只导入需要的几个macros

    假如我们有个助手模块,来帮助我们渲染表单(forms.html)


    {% macro input(name, value, type, size) %} 
         
    {% endmacro %} 
     
    {% macro textarea(name, value, rows) %} 
         
    {% endmacro %} 
    {% macro input(name, value, type, size) %}
       
    {% endmacro %}

    {% macro textarea(name, value, rows) %}
       
    {% endmacro %}
    最简单,最灵活的办法就是导入整个模板。(把模板导入到 forms变量里)


    {% import 'forms.html' as forms %} 
     

     
       
    Username
     
       
    {{ forms.input('username') }}
     
       
    Password
     
       
    {{ forms.input('password', null, 'password') }}
     
     

    {{ forms.textarea('comment') }}

     
    {% import 'forms.html' as forms %}


       
    Username

       
    {{ forms.input('username') }}

       
    Password

       
    {{ forms.input('password', null, 'password') }}


    {{ forms.textarea('comment') }}


    或者你可以导入模板的名字到当前的名字空间下。 (导入input,textarea 并把input重名为input_field)

     

    {% from 'forms.html' import input as input_field, textarea %} 
     

     
       
    Username
     
       
    {{ input_field('username') }}
     
       
    Password
     
       
    {{ input_field('password', '', 'password') }}
     
     

    {{ textarea('comment') }}

     
    {% from 'forms.html' import input as input_field, textarea %}


       
    Username

       
    {{ input_field('username') }}

       
    Password

       
    {{ input_field('password', '', 'password') }}


    {{ textarea('comment') }}

    如果是当前模板内定义的macros,那就不必导入了,直接使用特殊变量_self


    {# index.html template #} 
     
    {% macro textarea(name, value, rows) %} 
         
    {% endmacro %} 
     

    {{ _self.textarea('comment') }}

     
    {# index.html template #}

    {% macro textarea(name, value, rows) %}
       
    {% endmacro %}

    {{ _self.textarea('comment') }}


    那么你仍然可以导入_self到一个变量里,尽管这看起来很。。。没用。。


    {# index.html template #} 
     
    {% macro textarea(name, value, rows) %} 
         
    {% endmacro %} 
     
    {% import _self as forms %} 
     

    {{ forms.textarea('comment') }}

     
    {# index.html template #}

    {% macro textarea(name, value, rows) %}
       
    {% endmacro %}

    {% import _self as forms %}

    {{ forms.textarea('comment') }}


    from标签
    参见 import标签

    摘自 jiaochangyun的专栏
     

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478460.htmlTechArticleset标签 主要是用来给变量赋值的。 {% set foo = foo %} {% set foo = [1, 2] %} {% set foo = {foo: bar} %} {% set foo = foo ~ bar %} {% set foo, bar = foo, bar %} {% set...
    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    Video Face Swap

    Video Face Swap

    使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    热门话题

    Java教程
    1662
    14
    CakePHP 教程
    1419
    52
    Laravel 教程
    1313
    25
    PHP教程
    1262
    29
    C# 教程
    1235
    24
    使命召唤战区手游怎么设置中文 使命召唤战区手游怎么设置中文 Mar 22, 2024 am 08:41 AM

    使命召唤战区作为全新上线的一款手游,有很多的玩家都非常的好奇要怎么样才能够将这款游戏的语言设置为中文,其实非常的简单,玩家只需要下载中文的语言包,随后进行使用就可以进行修改了,详细的内容可以在这篇中文设置方法介绍之中进行了解,让我们一起来看看吧。使命召唤战区手游怎么设置中文1、首先进入游戏,点击界面右上角的设置图标。2、在出现的菜单栏中,找到【Download】这个选项并且点击。3、在这个页面中选择【SIMPLIFIEDCHINESE】(简体中文),就可以对简体中文的安装包进行下载了。4、回到设

    VSCode 设置中文:完全指南 VSCode 设置中文:完全指南 Mar 25, 2024 am 11:18 AM

    VSCode设置中文:完全指南在软件开发中,VisualStudioCode(简称VSCode)是一个常用的集成开发环境。对于使用中文的开发者来说,将VSCode设置为中文界面可以提升工作效率。本文将为大家提供一个完整的指南,详细介绍如何将VSCode设置为中文界面,并提供具体的代码示例。第一步:下载安装语言包在打开VSCode后,点击左

    Excel表格怎么设置显示中文?Excel切换中文操作教程 Excel表格怎么设置显示中文?Excel切换中文操作教程 Mar 14, 2024 pm 03:28 PM

      Excel表格是现在很多人都在使用的办公软件之一,有些用户因为电脑是win11系统,因此显示的是英文界面,想要切换成中文界面,但是不知道应该怎么操作,针对这个问题,本期小编就来为广大用户们进行解答,一起来看看今日软件教程所分享的内容吧。  Excel切换中文操作教程:  1、进入软件,点击页面上方工具栏左侧的“File”选项。  2、在下方给出的选项中选择“options”。  3、进入新界面后,点击左侧的“language”选项

    解决PHP写入txt文件中文乱码的技巧 解决PHP写入txt文件中文乱码的技巧 Mar 27, 2024 pm 01:18 PM

    解决PHP写入txt文件中文乱码的技巧随着互联网的迅猛发展,PHP作为一种广泛应用的编程语言,被越来越多的开发者所使用。在PHP开发中,经常需要对文本文件进行读写操作,其中包括写入中文内容的txt文件。然而,由于编码格式的问题,有时候会导致写入的中文出现乱码。本文将介绍一些解决PHP写入txt文件中文乱码的技巧,并提供具体的代码示例。问题分析在PHP中,文本

    一起学习word根号输入办法 一起学习word根号输入办法 Mar 19, 2024 pm 08:52 PM

    在word中编辑文字内容时,有时会需要输入公式符号。有的小伙们不知道在word根号输入的方法,小面就让小编跟小伙伴们一起分享下word根号输入的方法教程。希望对小伙伴们有所帮助。首先,打开电脑上的Word软件,然后打开要编辑的文件,并将光标移动到需要插入根号的位置,参考下方的图片示例。2.选择【插入】,再选择符号里的【公式】。如下方的图片红色圈中部分内容所示:3.接着选择下方的【插入新公式】。如下方的图片红色圈中部分内容所示:4.选择【根式】,再选择合适的根号。如下方的图片红色圈中部分内容所示:

    从零开始学习Go语言中的main函数 从零开始学习Go语言中的main函数 Mar 27, 2024 pm 05:03 PM

    标题:从零开始学习Go语言中的main函数Go语言作为一种简洁、高效的编程语言,备受开发者青睐。在Go语言中,main函数是一个入口函数,每个Go程序都必须包含main函数作为程序的入口点。本文将从零开始介绍如何学习Go语言中的main函数,并提供具体的代码示例。一、首先,我们需要安装Go语言的开发环境。可以前往官方网站(https://golang.org

    抖音标签后面的时钟是什么?怎么给抖音账号打标签呢? 抖音标签后面的时钟是什么?怎么给抖音账号打标签呢? Mar 24, 2024 pm 03:46 PM

    在浏览抖音作品时,我们经常能看到标签后面有一个时钟图标。那么,这个时钟到底是什么呢?本文将围绕“抖音标签后面的时钟是什么”展开讨论,希望为您的抖音使用提供一些有益的参考。一、抖音标签后面的时钟是什么?抖音会推出一些热门话题挑战,用户参与时会在标签后看到一个时钟图标,这代表作品正在参与话题挑战,并显示挑战的剩余时间。对于一些具有时效性的内容,如节假日、特殊活动等,抖音会在标签后面附上时钟图标,提醒用户该内容的有效期限。3.热门标签:当某个标签变得热门时,抖音会在标签后面添加时钟图标,表示这个标签正

    vscode中文界面设置教程 vscode中文界面设置教程 Mar 15, 2024 am 09:56 AM

    设置VSCode中文界面有两种方法。第一种是通过设置页面,搜索“locale”并选择“zh-cn”;第二种是通过快捷键打开语言配置文件,将语言修改为“zh-cn”。两种方法都需要保存设置并重启VSCode才能生效。如果遇到问题,还可以安装中文插件来解决。

    See all articles