模板引擎

存在意义

目前大多数模版引擎都使用类似替换关键词的方式实现, 比较有名的如 smarty
这种方式不仅需要使用者学习第三种语法方式, 更重要的是编写的模版结构已是面目全非, 非常不便后期的维护
而这个模版引擎, 以浏览器可解析的规范作为语法, 以设置编辑器PHP标识符为"<!--<? ?>-->"来高亮语法, 达到高效可维护的目的
  1. 该引擎是以html规范来开发视图层的方案
  2. 编辑器可语法高亮显示, 方便开发与维护
  3. 永远不删除 html 标签, 仅用 __del 属性标记
  4. 静态预览可以做原型使用, 动态编译不破坏html结构
  5. 模板默认会加载语言包等额外信息,节省开发时间
  6. 使用 htmlLoad 实现静态页面 include 的功能

开启引擎

  1. 框架配置preloaded加入"of_base_htmlTpl_engine"启动
  2. 模板的路径是 of_view::path() . '/html', 通过of_view::display('/html/xx.html') 或 include L::getHtmlTpl('/html/yy.html')引用模板
  3. 针对的模板是本地浏览无误的静态页 综合演示中有使用示例
  4. 通过框架配置htmlTpl修改语法标识符, 建议保持默认
  5. 通过 框架路径/?c=of_base_htmlTpl_tool 一键清除模版缓存, 生产模式下很有用

引擎解释

语法演示

演示描述 源代码 演示效果
属性演示 <input _style="'color: red;'" _="'value=_属性演示'" value="原属性" >
__del 演示 <input __del="value" value="删除以' '为分割符的属性,为空删除当前节点" >
__html 演示 <div __html="'<font color=\'red\'>这里写php</font>'" ><span>原html</span></div>
这里写php
普通注释 <!-- echo '这是普通注释'; -->
注释脚本 <!--<? echo '运行php脚本'; ?>-->这一行会被删除在script中不会删除这一行 上一行会被删除 运行php脚本上一行会被删除
js 脚本 <script type="tpl">可以将 type 设置成 tpl,这样在浏览时便不会执行 document.write("<!--<? echo '输出字符串'; ?>--> : 123"); </script> 输出字符串 : 123
等效写法 <img src="http://www.baidu.com/img/baidu_jgylogo3.gif?v=02045799.gif" /> <img _src="http://www.baidu.com/img/baidu_jgylogo3.gif?v=02045799.gif" /> <img _src="echo 'http://www.baidu.com/img/baidu_jgylogo3.gif?v=02045799.gif';" /> <img _src="'http://www.baidu.com/' . 'img/baidu_jgylogo3.gif?v=02045799.gif'" />
动态标题 <title __html="time()">原标题</title> 每次刷新页面会读取时间戳
路径解析 <input _value="xx/mm.js" >
for循环演示 <!--<? for($i = 1; $i < 6; ++$i) { ?>--> <input type="text" value="1" _value="$i"> <!--<? /* 可以用"/* ... */"方式实现批量删除标签不推荐 ?>--> <input type="text" value="2"> <input type="text" value="3"> <input type="text" value="4"> <input type="text" value="5"> <!--<? */ } ?>-->

htmlLoad

有个问题困扰着前端工程师很多年, 那便是 html 无法像其它语言那样使用 "include" 功能
现在通过这个 htmlLoad 可以解决这个问题 下载源码
/**
 * 描述 : 使 js 可以实现 include 功能
 *      示例 <script src="tool.js" include="head.html"></script>
 *      src 定位到该脚本, include 是相对该脚本路径的.html文件
 * 注明 :
 *      建议本脚本仅做UI开发使用
 *      为了方便后端语言整合, 不要使用在js中
 *      chrome edge 浏览器本地调试时, 需带上 --allow-file-access-from-files 启动参数
 *      firefox 浏览器本地调试时, 访问"about:config" 将 security.fileuri.strict_origin_policy 改为 false
 */
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>js include 演示</title>
    <script src="code/load.js" include="../head.html">此处include为相对code的路径</script>
</head>
<body>
    <script>alert('主体展示')</script>
    主体内容
    <script>L.open('tip')('静态页面调用框架集成插件演示成功', false);</script>
    <script src="code/load.js" include="../foot.html"></script>
</body>
</html>
如果需要静态页面中调用 of 中封装好的js插件时, 只需要在一个共用文件中加如下代码即可
<script __del>
/**
 * 描述 : 本地可调用 of 框架中的js扩展
 * 注明 : 需要放在 htmlLoad 的加载文件中, 如上例中的"head.html"中
 */
+function () {
    //当前文件, htmlLoad 自动填充不要修改
    var src = "";

    //配置系统根目录
    window.ROOT_URL = src + "../..";
    //配置框架根目录
    window.OF_URL   = ROOT_URL + "/include/of";
    //配置视图根目录
    window.VIEW_URL = ROOT_URL + "/view";

    //加载jquery
    document.write('<script src' + '="' + OF_URL + '/att/link/jquery.js"></' + 'script>');
    //加载L.js addin属性以项目为根目录可指定js集成插件位置
    document.write('<script src' + '="' + OF_URL + '/att/link/L.js" addin=""></' + 'script>');
}();
</script>