苹果CMS开发

苹果CMS模板继承使用方法

2024-06-14 人阅读

模板继承是一种比传统模板布局更加灵活的模板组织方式。在实际开发中,可以先创建一个基础模板,在基础模板中规划页面结构并定义多个可替换的区块,然后由子模板通过 extend 标签继承基础模板,并使用 block 标签对指定区块进行重新定义。

简单来说,模板继承与类的继承比较类似:基础模板负责定义整体页面结构,子模板负责根据具体页面需求重载相应的区块。这样可以减少重复代码,同时方便统一维护网站的公共结构。

什么是模板继承

模板继承的核心主要包含两个标签:blockextend

  • {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>

上面的基础模板定义了 titlemenuleftmainrightfooter 六个区块。后续的子模板可以根据不同页面需求,对这些区块进行重载。

子模板使用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模板机制的网站来说,合理使用模板继承可以让模板结构更加清晰,也能够减少重复代码。结合传统模板布局功能后,可以进一步提高模板开发和维护的灵活性。

最新信息
热门推荐
TAGS 详情 列表 提现 专题 sql 收藏 详情页 网址 接口 代码 制作 二开