经过深入的研究和细致的探寻,MooPHP从其他成熟模板引擎吸取了大量经验和实例,放弃采用任何成熟的模板引擎,而是集众家之所长独立研发了MooTemplate模板引擎。并将其在MooPHP框架中实现。
MooTemplate模板引擎不仅解决了困扰已久的速度瓶颈问题,而且模板中包含丰富易用的逻辑功能,又完美的实现了模板的可扩展性,使得一个模板足以容纳一个页面的全部信息,而不必再像以往那样必须用十几个小模板才能完成一个具有逻辑功能的页面。将为界面的扩充带来极大方便——只需修改模板就可实现一些基本的页面功能而不必改动程序。
MooTemplate模板引擎主要特点如下:
下文将介绍MooTemplate的语法规则,如果您需要了解MooTemplate的具体实现,请参见MooTemplate的代码。
{ … }是信息元素包围符,支持输出常量、输出变量、嵌套子模板、包含文件、PHP语法、数据查询block标签。
可以引用界面替换常量,其中必须为大写字母,该符号实际的作用是引用 PHP 常量 CONSTANT,因此也可以通过它来引用其他的常量内容。
可以引用界面替换变量,该符号实际的作用是引用 PHP 变量 $variable,因此也可以通过它来引用其他的变量内容。
在模板中的语法书写格式为
{template header}
上面的代码,将会在程序执行到主模板的时候,自动加载header模板进来。
在模板中的语法书写格式为
{include '../../config.inc.php'}
上面的代码,将会在程序执行到主模板的时候,自动加载”../../config.inc.php”这个PHP文件进来运行。
在模板中的语法书写格式为
{block type="sql" name="block" parameter="SELECT * FROM moophp_test ORDER BY id DESC LIMIT 0, 5"}
相当于 PHP 语句:
<?php $db = MooAutoLoad('MooMySQL'); $db->connmysql($dbHost, $dbName, $dbUser, $dbPasswd, $dbPconnect); $_MooBlock['block'] = $db->getAll("SELECT * FROM moophp_test ORDER BY id DESC LIMIT 0, 5"); ?>
注意本标签在特定的应用中可以扩展输出很多内容,比如在基于MooPHP开发的VitaBlog程序中可以使用
{block type="new" name="bloglist"}
就是返回为内容为最新8条日志信息的$_MooBlock['bloglist']数组。
注:本标签在不同应用中为可扩展标签,方便您开发不同系统的特殊需要。
在模板中的语法书写格式为
{php statement;}
相当于 PHP 语句:
<?php statement;?>
注意本标签亦可以做多行书写,比如
{php $string = 'hello word!';
echo $string;
}
相当于 PHP 语句:
<?php $string = 'hello word!'; echo $string; ?>
上面的代码,将会在程序执行到主模板的时候,自动运行本段PHP代码。
<!–{ … }–>是逻辑元素包围符,该符号用于包含条件和循环元素
在模板中的语法书写格式为
<!--{for $i=0;$i<5;$i++}--> statement <!--{/for}-->
相当于 PHP 的for循环语句:
for($i=0;$i<5;$i++) { statement }
在模板中的语法书写格式为
<!--{loop $array $value}--> statement <!--{/loop}-->
相当于 PHP 的数组循环语句:
foreach($array as $value) { statement }
在模板中的语法书写格式为
<!--{loop $array $key $value}--> statement <!--{/loop}-->
相当于 PHP 的数组循环语句:
foreach($array as $key => $value) { statement }
<!--{if expr1}--> statement1 <!--{elseif expr2}--> statement2 <!--{else}--> statement3 <!--{/if}-->
这是一个典型的条件模板,当条件 expr1 为真时,显示模板 statement1 内容,否则当 expr2 为真时,显示模板 statement2 内容,否则显示模板 statement3 的内容。如同其他语言中的条件控制一样,其中 <!–{elseif expr}–> 和 <!–{else} –> 是非必须的。