模板规范
├─ /views/comm/
│ ├─ about - 关于我们 相关模板
│ ├─ assets - js,css,icon资源
│ ├─ cargo - 产品 相关模板
│ ├─ ...
│ ├─ faqs - 问答 相关模板
│ ├─ home - 首页 相关模板
│ ├─ info - 杂项信息 相关模板
│ ├─ news - 新闻 相关模板
│ ├─ topic - 专题 相关模板
│ ├─ _config - 模板配置
│ ├─ _ctrls - 模板控制器
│ └─ _pub - 公共区块
- 基本规范
- 在/views/目录下,一组功能(模块)一个目录,如:
文档的模板目录是book
,示例的模板目录是demo
,
- assets - 资源目录,存放js,css,icon等文件,如果文件太多,可自定义子目录如:imgs
- _config - 模板配置,一个模型一个配置文件:见: 核心基础 > 绑定模板
- _ctrls - 模板控制器,每一个模型,用一个控制器文件,见: 核心基础 > 控制器模式
- _pub - 模块公用模板区块,可以自定义名称,建议以
_
开头
基本输出
- php代码
- 模板里可以直接写php代码;也可以用
{
php}
, {
/php}
把原始php包裹起来
- 变量输出
- {=$varName}
- <?=$varName?>
- {=$vname['vkey']}
- {=$vname['k1']['k2']}
- {=$_cbase['sys_name']}
- 原始php输出:<?=$varName?>,自php5.4之后,
<?=
标签可直接使用,建议用这个了!
- 常量输出
- {=PATH_PROJ}
- {=DIR_PROJ}
- 原始php输出:<?=DIR_PROJ?>,自php5.4之后,
<?=
标签可直接使用,建议用这个了!
- $_cbase 全局变量
- 当前模板目录: $_cbase['tpl']['vdir']
- 当前模板: $_cbase['run']['tplname']
- 系统名称: $_cbase['sys_name']
- 运行时相关变量:$_cbase['run']
- $this 对象
- 当前视图对象:包含 模型,路由,模板 相关参数 和 基本数据(如资讯详情数据);
- 当前路由参数:$this->mod, $this->key, $this->view, $this->mkv,
- 当前模板:$this->tplname
- Demo代码效果
流程控制
- 说明
- if-else
标签代码 |
解析结果 |
{if $name==1} |
<?php if ($name==1){ ?> |
{elseif $name==2} |
<?php } elseif ($name==2){ ?> |
{else} |
<?php } else { ?> |
{/if} |
<?php } ?> |
- for
标签代码 |
解析结果 |
{for $i=0;$i<10;$i++} |
<?php for($i=0;$i<10;$i++) { ?> |
{/for} |
<?php } ?> |
- loop
标签代码 |
解析结果 |
{loop $arr $vo} |
<?php foreach($arr as $vo){ ?> |
{loop $arr $key $vo} |
<?php foreach($arr as $key => $vo){ ?> |
{/loop} |
<?php } ?> |
加载CSS,JS
- 常规引用
<
link href='{=PATH_VIEWS}/dev/assets/home.css' type='text/css' rel='stylesheet'/>
<
script src='{=PATH_VENDUI}/layer/layer.js'><
/script>
- PHP简写
- 以下代码,要放在php标签里面,
{tpldir}
为当前模板目录,{mdodir}
为当前模型目录:
- eimp('/~tpl/cinfo.css'); // /views/{tpldir}/assets/cinfo.css
- eimp('/~now/cijs/funcs.js'); // /views/{tpldir}/{mdodir}/cijs/funcs.js
- eimp('/~base/cssjs/cinfo.css'); // /views/base/assets/cssjs/cinfo.css
- eimp('/~base/jslib/jsbase.js'); // /views/base/assets/cssjs/jsbase.js
- eimp('/layer/layer.js','vendui');
- Demo代码效果
模板包含
- 概述:
- 针对一些如 头尾导航(header,footer,nav) 等公共区块分离出来,给每个文件调用;
- 可以调用当前功能模块的模板区块,可以跨模块调用区块;
{
inc:"{subdir}/{fname}"}
,调用到 /views/{tpldir}/{subdir}/{fname}.htm 区块文件;
- 代码非常简洁!看以下示例:
- {inc}包含.htm模板区块:--- 假如当前模板目录为 demo(文档演示功能模块)
- 调用 /views/demo/_incs/head.htm 代码为:{inc:"_incs/head"},
\_incs/
不能省略
- 调用 /views/demo/_incs/foot.htm 代码为:{inc:"_incs/foot"}
- 调用 /views/book/_incs/foot.htm 代码为:{inc:"book:_incs/foot"} (跨模块调用 book(模块))
- {code}包含.php代码块
- 包含 /views/_incs/ucode.php 代码块,代码为:{code:"_incs/ucode"},
- 注意:(前面不要/,后面不要.php)
- 同样可跨模块调用 book(模块):{inc:"book:_incs/ucode"}
- 当让,完全可以用 php 的 include;但是,这种写法是否更简洁呢?!
- Demo代码效果
md文件包含
- 概述:
- 作用:把markdown文件代码,解析出html代码输出;
- 语法:
{
md:"{subdir}/{fname}"}
,
- 解析输出 /views/{tpldir}/{subdir}/{fname}.md 文件内容;
- 占位符:
- md文件包含可使用
{mod}
, {key}
占位符,这样可使多个页面,公用一个模板;
- Code:
{
md:"{mod}/{key}"}
, {
md:"mds/{key}"}
;
- Demo: 所有 贴心猫文档 的内容页,都是用了同一个模板:
- 本页模板代码,
本页md文件;
- 效果: 即包含本页在内的,你所有看到类似:/book/xxx-yyy.htm 页面,或 /book.php?xxx-yyy。
模板继承
- 概述:
- 如果有一组模板 非常相似,只是中间某一个或几个区块不同;
- 我们把相同部分抽取出来,作为父模板; 子模板
继承
父模板,只替换不同区块内容即可;
- --- 这就是模板继承。
- 区块标记:
- 父模板 中,吧不同区块,设置为 区块标记,其它语法,与普通模板一样;
- 语法:
{block:ubid} 默认父模板内容 {/block:ubid}
;
- 其中
ubid
为自定义区块名,字母开头,2-18个字母数字下划线组成;
- 一个模板中,区块名不能重复;
- 引用父模板:
- 假设 有父模板为:
_pub/lay_news.htm
;
- 子模板 中,首先要引用父模板;
- 语法:
{imp:"_pub/lay_news"}
- 设置区块:
- 子模板 中,只需要重新设置 父模板 区块中的内容即可;
- 语法:
{block:ubid} 新的子模板内容 {/block:ubid}
;
- 如果 父模板 中设置的区块,子模板中没有设置,则使用父模板中的内容;
- 特殊设置
- 导入父模板区块内容:
{block:ubid} 添加前面的信息 {:parent} 添加后面的信息 {/block:ubid}
,
上述代码中,{:parent}
位置会把父模板中的区块内容导入过来;
- 清空父模版区块内容:
{block:ubid}{:clear}{/block:ubid}
;
上述代码,吧父模板中的对应区块信息清空。
- Demo代码效果