Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[分享] Nemo模板引擎

[复制链接]
monkeye 发表于 2015-7-27 12:21:20 | 显示全部楼层 |阅读模式
本人早先时间开发的一个简易但定制性极强的快速模板引擎

  Nemo,这是本模板引擎的名字,估计大家都想到了“Finding Nemo”中那只鱼。嘿嘿,是的。本模板引擎就像那只鱼那样,别看小巧,但是本事大哦。具有如下的特点:

语法方面,内置 for、radio、select、include、switch 等模板流程语法,方便的控制模板的显示流程。

习惯方面,模板的语法标记,可以书写成HTML标记及注释两种书写,适合不同的开发习惯。

速度方面,模板自动编译,以及优化过的模板缓存文件,模板调用速度超快。
定制方面,代码阅读性强,可随意定制!
如何获得本程序?


如何使用?
  1. include 'nemo.php';

  2. define("_TPLPath_", 'tpl/');//定义模板路径
  3. define("_TPLCachePath_", 'cache/');//定义模板缓存路径

  4. include template('demo.htm');
复制代码
我的模板路径是变化的咋办?

template函数参数说明:
 include template(模板文件[, 模板文件的路径][, 模板编译缓存文件的路径][, 用户模板替换包][, 用户模板替换包路径]);
由此可以看到,“[, 模板文件的路径][, 模板编译缓存文件的路径]”2个参数用户可以自己在template中添加路径,如果参数不填写或者参数为空则依然按照常量的值读取。


如何生成静态页?
使用Nemo Html插件,请参考 writedemo.php 以及脚本样例 _script.php
  1. /*
  2. 提供 $_GET['v'] 参数的数组, 批量生成指定脚本文件的 html 页
  3. @parm1 string 脚本文件
  4. @parm2 string $_GET变量的值
  5. @parm3 array $_GET变量值的数组
  6. @parm4 string 生成完毕后返回的页面
  7. */
  8. nemo_html('_script.php', 'v', array(1,2,3,4,5,6,7), $_SERVER['PHP_SELF'].'?ok=1');
复制代码
变量语法

  变量语法是模板中直接书写PHP变量的方法。在Nemo中,变量可以直接书写在模板中,无需事先声明。书写时无需在变量两边添加大括号“{}”,数组变量的键值也无需添加引号。调用类中的变量,可以直接使用“->”。

如:
  1. $array[monkey] $float $n->tplfile
复制代码




语法:{变量:date 日期格式}

解释:按照指定的日期格式显示时间戳

  对于时间戳内容的变量,本语法可以直接按照指定的日期格式显示变量的值,日期格式允许用变量代替。

  日期格式请参考 PHP 手册 http://php.liukang.com/manual/zh/function.date.php

如:
  1. {$time:date $a}
复制代码
 将显示 2006-04-14



语法:{变量:float 格式}

解释:按照指定的格式显示浮点数

  对于浮点数,本语法可以将变量按照格式所指定的位数设置进行显示。格式写法为“M.D”,M 代表整数位,D 代表小数位。格式允许用变量代替。

如:
  1. {$float:float 3.4}
复制代码
 将显示 123.4567



语法:{变量:format 格式}

解释:按照指定的格式显示变量

  本语法会按照指定的格式显示变量,格式定义规则按照 PHP 的函数 sprintf 为准,格式允许用变量代替。

  格式请参考 PHP 手册 http://php.liukang.com/manual/zh/function.sprintf.php

如:
  1. {$float:format %010d}
复制代码
 将显示 0000000123



语法:{变量:specialchar}

解释:将变量的内容转换为可显形式

  本语法适用于把变量显示在 INPUT 表单的值中,使之能够完整的显示出自串的原始内容。本函数调用 PHP 的 htmlspecialchars 函数,如要对此函数附加参数,请用“{变量:specialchar 参数}”格式引用。

  参数含义请参考 PHP 手册 http://php.liukang.com/manual/zh/function.htmlspecialchars.php

如:<input name='name' value='{$specialchar:specialchar}'>



语法:{变量:default 默认值}

解释:当变量无效显示默认值

  本语法会自动判断变量是否定义或者为空,如符合则显示默认值,默认值允许用变量代替。

如:
  1. {$error:default 没有错误}
复制代码




流程语法

  流程语法为控制模板显示方式的语法,把 PHP 代码中用于显示的流程语句写在此处,可以有效的 PHP 代码的效率,这也是 MVC 设计理论的重点。流程语法有2种书写方法:

<!--语法标记-->

  按照HTML注释的书写方法,这样可以方便使用UltraEdit等直接编辑源码的程序员方便的查看到流程语句而设定的。

<语法标记-->

  按照HTML标记的书写方法,这样是照顾到使用Dreamweaver等可视化工具制作模板的人员,因为HTML中未定义的标记在编辑状态中是不会显示的,因此不会影响设计模板的可视化效果。大家可以依照习惯选用。



语法:<!--include:模板文件-->

  模板运行到此处将引用指定的模板文件的内容到当前位置,如果定义了常量 _TPLPath_ ,将到指定的目录中去读取子模板文件。

如:<!--include:header.htm-->



语法:定义:<!--func 函数名:函数参数-->......<!--/func-->
   调用:<!--func:函数名(参数)-->

  自定义一个模板函数,你可以把模板中经常重复的内容写进此语法,需要的时候直接调用函数即可。同时调用语法也可以调用其它函数。

如:
  1. <!--func aaa:$a,$b-->
  2.     $a:<br>
  3.     <!--loop:$b-->{[name]}<br><!--/loop--> <br>
  4.   <!--/func-->

  5.   <!--func:aaa('for_option', $for_option)-->
复制代码




语法:<!--if:条件表达式-->...<!--else-->...<!--/if-->

   <!--if:条件表达式-->...<!--elseif:条件表达式-->...<!--elseif:条件表达式-->...<!--/if-->

  模板运行到此处将按照 if 条件表达式的状态显示相应的内容。条件表达式中的变量书写规则同变量语法中的声明。

如:
  1. <!--if:$if==1-->
  2.  条件成立
  3. <!--else-->
  4.  条件不成立
  5. <!--/if-->
复制代码




语法:<!--switch:变量-->...<!--case:值1-->...<!--case:值2-->...<!--case:值n-->...<!--/switch-->

  当一个变量存在多个不同的值显示不同的内容时,可以用此语法。值可以写成字符也可以写成变量。

  <!--switch:变量-->...<!--case:值1--> 中为所有值都不符合时显示的默认内容。

如:
  1. <!--switch:$switch-->默认
  2. <!--case:1-->Case 1
  3. <!--case:2-->Case 2
  4. <!--case:3-->Case 3
  5. <!--/switch-->
复制代码




循环语法包含3类,一类是 for 标准与法,一类是用于 HTML 标记的 for_xxx 系列语法,最后一类是 loop 特殊循环语法。

语法:<!--for:数组变量 键变量 值变量-->...<!--/for--> <!--for:数组变量 值变量-->...<!--/for-->

  数组变量可以通过此语法显示其内容,如果为多维数组,可以继续嵌套。

如:
  1. <!--for:$for $k $v-->
  2. $k = $v
  3. <!--/for-->
复制代码




语法:<!--for_option:数组变量 值键 值变量 选中的值-->......<!--/for_option-->

  本语法作用为生成 <select> 标记的 <option> 标记,适用于2维数组,值键为用于显示 <option> 标记 value 属性所在键的值。

  选中的值可以为数组变量也可以为单独变量,存在的值在 <option> 中被默认加上 selected 属性。如不希望设置默认选中的值,则选中的值可填写 null。

  举例说明,如数组 $for_option 类似为如下结构:

id   name
--------------
1    Monkey
2    Cat
3    Mouse

则我们如此书写模板 <!--for_optionfor_option id $v null-->$v[name]<!--/for_option-->

那么生成结果为:

<option value="1">Monkey<option value="2">Cat<option value="3">Mouse

语法:<!--option:数组变量 选中的值-->

  此语法为 <!--for_option--> 语法的简化版,区别在于本语法将直接用数组变量的键作为 <option> 标记的 value 属性,数组变量的值作为显示的内容。



语法:<!--for_checkbox 名称:数组变量 值键 值变量 选中的值-->......<!--/for_checkbox-->

  本语法作用在于通过循环生成多个 <input type="checkbox"> 的值,含义同 <!--for_option--> 语法,区别在于名称为 <input> 标记 name 属性的值。

如:
  1. <!--for_checkbox name1[]:$for_option id $v $selected-->$v[name]<br><!--/for_checkbox-->
复制代码


同样,此语法也有一个简化版

语法:<!--checkbox 名称:数组变量 选中的值-->



语法:<!--for_radio 名称:数组变量 值键 值变量 选中的值-->......<!--/for_radio-->

  本语法作用在于通过循环生成多个 <input type="radio"> 的值,含义同 <!--for_option--> 语法,区别在于名称为 <input> 标记 name 属性的值,且选中的值不能为数组,因为 radio 为单选框。

如:<!--for_radio name2for_option id $v $selected-->$v[name]<br><!--/for_radio-->

同样,此语法也有一个简化版

语法:<!--radio 名称:数组变量 选中的值-->



语法:<!--loop:数组变量-->...{[键值]}...<!--/loop-->

  本语法作用于二唯数组变量,在数组的二维键值为字串时使用,循环中可以直接书写二维键值。
如:

  1. 以上例中的 $for_option 数组为例
  2. <!--loop:$for_option-->
  3. {[name]}<br>
  4. <!--/loop-->
复制代码

将显示
Monkey
Cat
Mouse



语法:<!--loop:循环起始 循环运行条件 循环增量-->......<!--/loop-->

  本语法作用同 PHP 的 for 语法,三个参数的含义与 for 相同,用空格分割。

如:
  1. <!--loop:$i=1 $i<10 $i++-->+<!--/loop-->
复制代码





特殊语法

  特殊语法为额外附加的,附带一些PHP特性的语法,方便在模板中书写 PHP 语句。

语法:{echo:显示的内容}

  此语法直接调用echo显示指定的内容,等同于执行了echo。字串注意加引号。



语法:<!--phpHP语句-->

  此语法中可以直接书写PHP语句。



语法:<!--**注释**-->

  此语法中可以书写注释,注释中的内容不会被模板引擎编译

语法:<!--htmlcache-->......<!--/htmlcache-->

  包含在本语法中的模板内容,将直接缓存显示的静态HTML结果,如配合_TPLCacheLimit_常量将可以动态更新静态缓存部分的内容,否则只有当模板文件更改的时候才会更新静态缓存部分。



用户模板替换包

  用户模板替换包为方便自由替换模板内容所用,可以用于语言包的设计,或者一些通用写法的简略

语法:{#替换包变量#}

  用户自定义替换包需要按照以下格式书写一个PHP文件。

---------------------------------------------------
  1. <?php
  2. $data = array (
  3. 'Welcome to' => '欢迎来到',
  4. 'PHPSo' => 'PHP课堂'
  5. );
  6. ?>
复制代码
---------------------------------------------------

  $data 数组元素的key为替换的变量,数组元素的值为要替换成的内容。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
北北″ 发表于 2015-7-27 12:26:31 | 显示全部楼层
回复

使用道具 举报

民审草民 发表于 2015-7-27 12:55:20 | 显示全部楼层
暂位
回复

使用道具 举报

科站网 发表于 2015-7-27 17:38:26 | 显示全部楼层
还有前排
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-23 06:38 , Processed in 0.027899 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表