模版语法详解

来自BMForum
跳转至: 导航搜索

BMForum 2006 5.0 起,启用了功能更强大,效率更高,可定制性更强的模版引擎,下面详细讲述 BMForum 新模版引擎的调用、语法。

调用模版

当开发插件的时候,需要用到模版引擎,可以用下面的方法调用:

  • 首先引入模版引擎文件
include_once("include/template.php");
  • 然后,执行模版解析函数
$template_name = newtemplate("myplugins_index", $temfilename, $styleidcode, $lang_zone, 4, 1);

其中, myplugins_index 为插件模版的文件名,需要将该文件放置于

plugins/templates/bsd01/ 

目录下。

$template_name 将获得函数返回的用于调用的模版缓存

$temfilename 代表模版名称,例如 bsd01,可以更改为插件名

$styleidcode 是风格ID,一般情况下无需改动

数字 4 表示 if、loop 等逻辑语句允许的循环次数

数字 1 表示这是插件模版,当没有设置为 1 的时候,将不再调用 plugins/templates/bsd01/ 下的模版,而是 newtem/bsd01/ 的模版

注:如果模版有需要导入的永久不变的变量(如语言包)需要在解析模版之前放入下面的类似语句:

$lang_zone = array("bm_skin"=>$bm_skin, "otherimages"=>$otherimages);

其中的变量可以是数组

  • 在执行完上述操作后,在程序的最后需要设置输出代码:
require($template_name);

模版语法

标准 HTML/XHTML

一般情况下,模版文件内容只要是 HTML、XHTML 等任何代码,即可被输出成功

一般调用语法

当在一个模版中,需要调用另外的模版,请使用下面的语句

<!--{template 模版名}-->

例如,调用 myplugin_header 模版:

<!--{template myplugin_header}-->

如果要调用论坛的 header 或 footer:

<!--{template header}-->

<!--{template footer}-->

执行 PHP 语句

当有特殊需要的时候,可以在模版中执行 PHP 语句,例如:

<!--{eval $abc=1; echo $abc;}-->

该示例将赋值 $abc = 1,同时输出 $abc。

输出变量、常量

在模版中,有多种方法输出变量、常量,如:

{echo $abc}

也可直接输入变量

$abc

逻辑判断语句

在模版中,可以像在 PHP 内一样,执行逻辑判断语句。

示例1:

<!--{if $uvw == 1}-->   
  uvw 
<!--{/if}-->

示例2:

<!--{if $hello == 1 && $abc == 1}-->
    Hello is one
    <!--{if $abc == 1}-->
        abc
    <!--{else}-->
       cde
    <!--{/if}-->
<!--{elseif $hello == 2}-->
    Hello is two
<!--{/if}-->

上述两个例子中,完整地体现了一个判断过程。

注:逻辑语句的嵌套层数根据程序的设置而定

数组遍历函数

在 BMForum 中,遍历数组需要使用 loop 语句,效果类似于 PHP 的 foreach 函数,如:

示例1:

<!--{eval $array = array(1,2,3,4,5);}--> //建立数组并赋值 

<!--{loop $array $value}-->
    数组 array 的值现在是: {echo $value}
    <br/>
<!--{/loop}-->

该语句等同于 PHP 中的:

if(is_array($array)){
  foreach ($array as $value) {
    echo "数组 array 的值现在是: $value";
    echo "<br/>";   
  }
}

示例2:

<!--{eval $array = array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);}--> //建立数组并赋值 

<!--{loop $array $key $value}-->
    数组 array 的值现在是: {echo $value} 键为 {echo $key}
    <br/>
<!--{/loop}-->

该语句等同于 PHP 中的:

if(is_array($array)){
  foreach ($array as $key => $value) {
    echo "数组 array 的值现在是: $value  键为 $key";
    echo "<br/>";   
  }
}

注:遍历语句的嵌套层数根据程序的设置而定