苹果CMS模板继承使用方法
2024-06-14 共人阅读模板继承是一种比传统模板布局更加灵活的模板组织方式。在实际开发中,可以先创建一个基础模板,在基础模板中规划页面结构并定义多个可替换的区块,然后由子模板通过 extend 标签继承基础模板,并使用 block 标签对指定区块进行重新定义。
简单来说,模板继承与类的继承比较类似:基础模板负责定义整体页面结构,子模板负责根据具体页面需求重载相应的区块。这样可以减少重复代码,同时方便统一维护网站的公共结构。
什么是模板继承
模板继承的核心主要包含两个标签:block 和 extend。
{block}:用于在基础模板中定义可以被子模板覆盖的区块。{extend}:用于让当前子模板继承指定的基础模板。{__block__}:用于在重载区块时保留基础模板中原有的区块内容。
因此,模板继承的关键就是基础模板负责规划区块,子模板负责替换或扩展这些区块。
block区块标签的使用方法
每个区块由 {block} 和 {/block} 标签组成,并且必须指定 name 属性,用于标识当前区块。
{block name="title"}<title>网站标题</title>{/block}name 用于指定区块名称。同一个基础模板中,区块名称应保持唯一,方便子模板进行准确重载。
区块内部可以包含普通HTML代码、模板标签以及模板变量,例如:
{block name="title"}<title>{$web_title}</title>{/block}除了普通HTML和变量之外,区块中还可以使用其他模板标签,例如加载外部模板文件:
{block name="include"}{include file="Public:header" /}{/block}基础模板示例
一个基础模板可以定义多个不同的区块,例如创建一个 base.html 基础模板,用于规划网站的整体页面结构:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>{block name="title"}标题{/block}</title>
</head>
<body>
{block name="menu"}菜单{/block}
{block name="left"}左边分栏{/block}
{block name="main"}主内容{/block}
{block name="right"}右边分栏{/block}
{block name="footer"}底部{/block}
</body>
</html>上面的基础模板定义了 title、menu、left、main、right 和 footer 六个区块。后续的子模板可以根据不同页面需求,对这些区块进行重载。
子模板使用extend继承基础模板
在子模板中,可以通过 extend 标签继承上面的 base 基础模板:
{extend name="base" /}
{block name="title"}{$title}{/block}
{block name="menu"}
<a href="/" >首页</a>
<a href="/info/" >资讯</a>
<a href="/bbs/" >论坛</a>
{/block}
{block name="left"}{/block}
{block name="main"}
{volist name="list" id="vo"}
<a href="/new/{$vo.id}">{$vo.title}</a><br/>
{$vo.content}
{/volist}
{/block}
{block name="right"}
{volist name="news" id="new"}
<a href="/new/{$new.id}">{$new.title}</a><br/>
{/volist}
{/block}
{block name="footer"}
{__block__}
@ThinkPHP 版权所有
{/block}子模板如何重载基础模板区块
子模板通过 extend 继承基础模板后,可以重新定义基础模板中已经存在的区块。
如果子模板没有重新定义某个区块,则默认继续使用基础模板中的内容。如果重新定义了一个空区块,则可以将基础模板对应区块的内容覆盖为空,从而达到隐藏该区块内容的效果。
例如:
{block name="left"}{/block}这里重新定义了 left 区块,但区块内部没有任何内容,因此基础模板中的“左边分栏”内容会被覆盖。
使用__block__保留父模板内容
如果子模板希望在重载区块的同时保留基础模板原来的内容,可以使用 {__block__}。
{block name="footer"}
{__block__}
@苹果CMS pgcms.net 版权所有
{/block}{__block__} 表示引用被继承模板中对应区块的原始内容。最终输出时,基础模板的内容和子模板新增内容会组合在一起。
例如基础模板中的 footer 为:
{block name="footer"}底部{/block}子模板使用 {__block__} 后,最终内容相当于:
底部 @苹果CMS pgcms.net 版权所有
extend标签的使用方法
extend 标签用于指定当前子模板需要继承的基础模板,基本用法与加载模板文件类似。
例如:
{extend name="Public:base" /}也可以使用文件路径指定基础模板:
{extend name="./Template/Public/base.html" /}具体模板名称和路径需要根据当前项目的模板目录结构进行调整。
子模板中的内容限制
使用模板继承后,子模板主要用于定义基础模板中已经存在的区块。一般情况下,子模板中不应直接编写不属于 block 区块的页面内容,否则这些内容不会按照普通模板内容直接输出。
例如:
{block name="title"}<title>{$title}</title>{/block}
<a href="/" >首页</a>
<a href="/art/index" >资讯</a>
<a href="/actor/" >明星</a>上面的导航代码没有放入任何 block 区块中,因此不能按照普通页面内容的方式输出。正确的做法是将导航放入基础模板已经定义好的区块中,例如:
{block name="menu"}
<a href="/" >首页</a>
<a href="/art/index" >资讯</a>
<a href="/actor/" >明星</a>
{/block}模板继承可以多级继承
模板继承并不局限于两级结构,也可以进行多级继承。例如:
A(基础模板) ↓ B(继承A) ↓ C(继承B)
在这种结构中,C模板可以继续重载B模板中的区块。如果C、B存在同名区块,后继承的模板可以覆盖前面模板中的对应区块。
需要注意的是,子模板能够重载的区块需要来自继承链中的基础模板定义。实际使用时,应提前规划好基础模板的区块结构,避免后续页面需要扩展时缺少对应的 block。
模板继承的主要优势
减少重复代码:网站公共HTML结构只需要在基础模板中维护。
方便统一修改:修改基础模板后,可以让多个继承模板共享公共结构。
页面结构更加清晰:基础模板负责布局,子模板负责具体页面内容。
支持区块重载:不同页面可以根据需求替换标题、菜单、内容、侧栏和底部等区域。
支持内容扩展:通过
{__block__}可以在保留原内容的基础上增加新的内容。支持多级继承:可以根据项目规模建立多层模板结构。
模板继承使用注意事项
block标签需要指定唯一的name名称。子模板中的
block名称应对应基础模板中已经定义的区块。子模板主要用于重载区块,不要在区块外直接编写需要输出的页面内容。
需要保留基础模板原有内容时,可以使用
{__block__}。需要删除基础模板某个区块内容时,可以重新定义为空的
block。使用
extend时,应确认基础模板名称或文件路径正确。设计基础模板时,应提前规划好常用区块,为后续页面扩展预留空间。
总结
模板继承的核心思想是将网站公共结构放到基础模板中,再通过 block 定义可以被修改的区域,子模板使用 extend 继承基础模板,并根据页面需求重载对应区块。
对于苹果CMS以及基于ThinkPHP模板机制的网站来说,合理使用模板继承可以让模板结构更加清晰,也能够减少重复代码。结合传统模板布局功能后,可以进一步提高模板开发和维护的灵活性。
- 整体架构与底层运行逻辑彻底梳理5热度
- 二次开发完整教程3热度
- 视频模板制作常用函数62热度
- 会员积分记录页面调用代码62热度
- 苹果cms内置ajax数据接口说明94热度
- 会员权限列表模板调用教程65热度
- 专题搜索教程86热度
- 更换模板报错解决方法108热度
- 自定义标签使用教程98热度
- 视频筛选调用教程101热度
