[搜]

贴心猫-文档

模板规范

  • 模板目录结构(示例)
    ├─ /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代码效果

流程控制

  • 说明
    • 尽量接近php语法?!
  • 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代码效果