文章分页:
依照框架自身模版系统特点,建议在生成页面时采用三级层级的结构:
第一层:页面框架
也就是应用所有页面都会包含的外层部分,一般情况下就是页面基本头属性,页面导航,结尾版权,以及通用脚本等几个部分,框架建议基础基础页面模版结构如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title><!--web_title--></title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv="windows-Target" content="_top" />
<meta http-equiv="Content-Type" content="text/html; charset=<!--charset-->" />
<meta name="keywords" content="<!--page_keywords-->" />
<meta name="description" content="<!--page_description-->" />
<base href="<!--path_root-->" />
<link rel="Shortcut Icon" href="favicon.ico" />
<!--page_start-->
<script type="application/javascript">global.root='<!--path_root-->';</script>
</head>
<body>
<header>页面导航</header>
<div>
<!--main-->
</div>
<footer>页尾版权</footer>
<!--page_end-->
</body>
</html>
可以看到代码中有很多模版变量标签,框架会自动将这些标签根据设置信息和应用参数替换为对应的内容,其中,有几个变量需要着重说明:
- <!--page_start--> 和 <!--page_end--> 这两个标签对应页面内容钩子,通过 $mystep->setAddedContent(“start”, $content) 和$mystep->setAddedContent(“end”, $content) 方法添加的内容(可多次累计添加),都会显示在对应的位置。
- <!--path_root--> 为框架相对于网站根目录的路径,本情况主要针对框架不位于域名根目录的情况,非必需。
- <!--main--> 是最关键的项目,即子模版解析的结果代码将用于替换这个标签,虽然可以根据需要设置多个子模版代码替代标签,但是一般情况下仅单独出现此标签。
其中,页面导航和页尾版权是象征性的展位字符,可根据具体需要,同时模版中的循环、判断等标签也同样适用。
第二层:页面内容
也就是所显示页面的主体内容,一般情况下用于替换上一层中 <!--main--> 代码部分,本层内容是页面的主要部分,同时也是最复杂的部分,里面多由循环、判断和自定义标签组成,示例如下:
<div class="container-fluid">
<div class="row">
<div class="col-8">
<div class="mb-3">
<div class="text-center">
<h4><!--record_subject--></h4>
<h7 class="text-secondary border-top">来源:<!--record_original--> | 时间:<!--record_add_date--> | 浏览:<!--record_views--></h7>
</div>
<div id="content" class="py-3">
<!--record_content-->
</div>
<div class="row px-3">
文章标签:
<!--loop:start key="tag"-->
<a class="mr-3" href="<!--tag_link-->"><!--tag_name--></a>
<!--loop:end-->
</div>
</div>
</div>
<div class="col-4">
<div class="card">
<div class="card-header">
<h5 class="card-title m-0">最新更新</h5>
</div>
<div class="card-body">
<!--news limit="10" loop="10" order="news_id desc"-->
</div>
</div>
</div>
</div>
</div>
以上代码为文章内容页的节选,其中 <!--record_[para_name]--> 系列模版标签为通过 $tpl->assign('record', $recordset) 的模式,将从数据库中查询出的文章内容结果集直接批量赋值。loop标签为通过循环,依次将文件标签显示在页面中。最后就是 自定义标签 <!--news limit="10" loop="10" order="news_id desc"--> ,此标签就是模版的第三层结构。
第三层:扩展标签
模版的第三层结构是模版的子模块,用于在模版中反复出现,解析模式基本一致,只要传入不同的参数就可以生成目标内容的,或者通过插件为应用结合特定功能添加页面显示。具体使用方法可在页面模版栏目的扩展标签章节查看详细说明。需要再次提示一下以下几点注意:
- 扩展标签的语法模式属于主模版的简化,将循环等结构的属性直接在扩展标签中体现,并且可以设置更多项目,不再出现在对应的子模版标签中,具体模式不完全一致;
- 标签属性值可为固定值,也可以为全局变量(便于动态设置属性),但是务必要用半角单引号引用;
- 扩展标签模版与当前应用模版同在一个目录,建议文件名设定为 “block_[标签名]_[模式名].tpl”的模式以便于管理。