模板继承是一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层。模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义的区块进行重载。

大理石平台厂家

因此,模板继承的优势其实是设计基础模板中的区块(block)和子模板中替换这些区块。

每个区块由<block></block>标签组成。 下面就是基础模板中的一个典型的区块设计(用于设计网站标题):

  1. <block name="title"><title>网站标题</title></block>

block标签必须指定name属性来标识当前区块的名称,这个标识在当前模板中应该是唯一的,block标签中可以包含任何模板内容,包括其他标签和变量,例如:

  1. <block name="title"><title>{$web_title}</title></block>

你甚至还可以在区块中加载外部文件:

  1. <block name="include"><include file="Public:header" /></block>

一个模板中可以定义任意多个名称标识不重复的区块,例如下面定义了一个base.html基础模板:

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  4. <block name="title"><title>标题</title></block>
  5. </head>
  6. <body>
  7. <block name="menu">菜单</block>
  8. <block name="left">左边分栏</block>
  9. <block name="main">主内容</block>
  10. <block name="right">右边分栏</block>
  11. <block name="footer">底部</block>
  12. </body>
  13. </html>

然后我们在子模板(其实是当前操作的入口模板)中使用继承:

  1. <extend name="base" />
  2. <block name="title"><title>{$title}</title></block>
  3. <block name="menu">
  4. <a href="/" >首页</a>
  5. <a href="/info/" >资讯</a>
  6. <a href="/bbs/" >论坛</a>
  7. </block>
  8. <block name="left"></block>
  9. <block name="content">
  10. <volist name="list" id="vo">
  11. <a href="/new/{$vo.id}">{$vo.title}</a><br/>
  12. {$vo.content}
  13. </volist>
  14. </block>
  15. <block name="right">
  16. 最新资讯:
  17. <volist name="news" id="new">
  18. <a href="/new/{$new.id}">{$new.title}</a><br/>
  19. </volist>
  20. </block>
  21. <block name="footer">
  22. @ThinkPHP2012 版权所有
  23. </block>

可以看到,子模板中使用了extend标签定义需要继承的模板,extend标签的用法和include标签一样,你也可以加载其他模板:

  1. <extend name="Public:base" />

或者使用绝对文件路径加载

  1. <extend name="./Template/Public/base.html" />

在当前子模板中,只能定义区块而不能定义其他的模板内容,否则将会直接忽略,并且只能定义基础模板中已经定义的区块。

例如,如果采用下面的定义:

  1. <block name="title"><title>{$title}</title></block>
  2. <a href="/" >首页</a>
  3. <a href="/info/" >资讯</a>
  4. <a href="/bbs/" >论坛</a>

导航部分将是无效的,不会显示在模板中。

在子模板中,可以对基础模板中的区块进行重载定义,如果没有重新定义的话,则表示沿用基础模板中的区块定义,如果定义了一个空的区块,则表示删除基础模板中的该区块内容。 上面的例子,我们就把left区块的内容删除了,其他的区块都进行了重载。

子模板中的区块定义顺序是随意的,模板继承的用法关键在于基础模板如何布局和设计规划了,如果结合原来的布局功能,则会更加灵活。

 

thinkphp 模板继承的更多相关文章

  1. ThinkPHP模板继承和修改title

    先说下模板继承: 假定:在View文件夹中 -> Public  公共模块 —>base/header/top/footer 4个html文件 这下面base文件使用include引入其他 ...

  2. thinkphp模板继承

    public/base.html <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  3. thinkphp中模板继承

    模板继承是3.1.2版本添加的一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层.模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局), ...

  4. thinkPHP框架 简单的删除和修改数据的做法 和 模板继承的意思大概做法

    BiaodanController.class.php控制器页面 <?php namespace Admin\Controller; use think\Controller; class Bi ...

  5. thinkphp 中区块block和模板继承extend用法举例

    1.介绍 模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义 ...

  6. (转) ThinkPHP模板自定义标签使用方法

    这篇文章主要介绍了ThinkPHP模板自定义标签使用方法,需要的朋友可以参考下  转之--http://www.jb51.net/article/51584.htm   使用模板标签可以让网站前台开发 ...

  7. thinkPHP 模板的使用技巧(十三)

    原文:thinkPHP 模板的使用技巧(十三) 模板的使用技巧:页面跳转 .模板包含.模板渲染.模板的继承 页面跳转 <a href='__URL__/index'>我要跳转到首页面,用这 ...

  8. 转换器2:ThinkPhp模板转Django模板

    前天写了个<ThinkPhp模板转Flask模板> 居然被同事鄙视了,原因是他用Django,我用Flask,为了避免被他继续安利Django的强大.我决定写一个Django模板转换器. ...

  9. Thinkphp模板简单入门

    Thinkphp模板概述: ThinkPHP内置了一个基于XML的性能卓越的模板引擎,这是一个专门为ThinkPHP服务的内置模板引擎,使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签, ...

随机推荐

  1. Center OS 7安装 Apollo

    声明: 每个人的情况都不一样,所以大家在看教程的时候自行斟酌,最好先扫一遍,再来根据自身情况进行操作.同时,遇到的问题也可能不尽相同,要灵活处理. 了解: Apollo是从原始ActiveMQ的基础构 ...

  2. 使用JMeter进行http压力测试

    一.背景及文档目的说明 采用JMeter测试工具对腾讯视频做负载测试,使用 JMeter图形结果和聚合图帮助测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力并估计系统瓶颈和并发 ...

  3. Codeforces 1152D DP

    题意:有一颗由长度为2 * n的合法的括号序列构成的字典树,现在你需要在这颗字典树上选择一些不连接的边,问最多可以选择多少条边? 思路:不考虑题目条件的话,我们只考虑在随意的一棵树上选择边,这是一个贪 ...

  4. 反编译字节码角度分析synchronized关键字的原理

    1.synchronized介绍 synchronized是java关键字.JVM规范中,synchronized关键字用于在线程并发执行时,保证同一时刻,只有一个线程可以执行某个代码块或方法:同时还 ...

  5. QT开发资料

    QT开发入门资料 https://tmr.js.org/p/cc37608/ QT学习之路: https://www.devbean.net/

  6. SQLServer2008上的SDE备份和还原

    一.备份 右键数据库>任务>备份.选择完整模式,导出为xxx.bak文件即可. 二.还原 1.创建sde用户名,新建同名数据库xxx,并指定sde为xxx的拥有者. 2.在master上创 ...

  7. ReadWriteLock 如何使用?

    QReadWriteLock从名字看就知道是读写锁的意思.和QMutex一样,QReadWriteLock也是线程同步的一种工具.那么它有什么用呢?和QMutex又有什么区别呢?写个例子瞧一瞧. 特点 ...

  8. 沉默的QQ

    QQ很久没有叮咚了,一是没人发消息给我,二是我关了QQ的声音.现在除了几个还在接收消息的群外,其他的群都屏蔽了,有事才上去看看.我从来就没写过QQ空间,那些以前经常写空间的朋友也多数停止了喧闹.每次登 ...

  9. Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系?

    简单介绍 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.Spring使你能够编写更干净.更可管理.并且更易于测试的代码. Spring MVC是Spring的一个模块,一 ...

  10. FTP 连接模式 (主动模式被动模式)

    FTP是有两种传输的模式的,主动模式和被动模式,一个完整的FTP文件传输需要建立两种类型的连接,一种为文件传输下命令,称为控制连接,另一种实现真正的文件传输,称为数据连接. 1. 控制连接客户端希望与 ...