视图类(core/tpl.php)

Source:phpbone.com  Author:IT柏拉图
2013-11-20

    居于简洁的原则出发,phpbone的视图,其实就是一个简单的模板类封装,操作十分简单,模板引擎核心是自创的quicktag引擎,有需要时稍加修改,可以很容易的兼容smarty模板引擎,tpl模板类主要成员函数如下:

一、tpl类的成员函数
1、给模板变量赋值
tpl::assign ($tpl_var_name,  $value)

2、显示视图(显示解析运行后的模板
tpl::display ($tpl )
$is_debug_mt  是否调试内存(如果想要实时获得程序在某代码断使用了多少内存,可以用 test_debug_mt( msg ) 在该处调试,debug信息会显示出这些地方内存占用情况)

3、获取解析运行模板后的内容
tpl::fetch( $tpl )

使用tpl类,需要特别注意的事项是关于 $tpl 这个值的设置,在bone app入口中,定义了如下配置:

 

  1. $app_config = array
  2.     'app_title' => 'phpbone'
  3.     'app_name' => ''
  4.     'purview_config' => ''
  5.     'session_start' => false 
  6. ); 

需要注意的是 app_name 这个选项,是由它决定模板所在目录的,为空时表示放在:
templates/template 的根目录,如果应用不是根目录应用,而是一个子目录应用,模板相应放在
templates/template/app_name  中,因此这个 app_name 必须为非中文并且不含空格等非法文件名字符组成。
假设模板在 templates/template/app_name ,如果要使用 include 语法,应该使用
<{include file="app_name/header.tpl"}>
如果使用
<{include file="header.tpl"}>
引入的将是 templates/template/header.tpl

二、quicktag模板引擎基本语法

1、普通变量输出
系统保留系统数组:$config、$request
<{$config.site_title}>  相当于 config::get('site_title')  这里的值并非是config目录的配置,而是数据库里允许让用户修改的配置
<{$request.pageno|intval(@me)}>      一个request变量
<{$test}> ---> 这是一个普通的变量!
<{$arr.title}> ---> 这是数组的title值, ok,嗯很大很长!
<{$arr.title|md5(@me)}> ---> 05e1e668b6b5595d18a04af07f1cc20e (自由函数)
<{$arr.title|#u8substr(@me, 10)}> ---> 这是数组的title(修正插件, 对应modifier.u8substr.php)
2、if语法
<{if $arr.title=='' }>
标题为空
<{elseif $arr.title=='xxx' }>
标题为xxx
<{else}>
标题非空
<{/if}>
标题非空
3、自由函数
<{iconv_substr($arr.title, 0, 10, 'utf-8')}> ---> 这是数组的title
4、自定义函数插件
对应文件为:plugins/function.tagname.php, 与普通函数调用不同之处是,这是属于动态触发的插件函数,而非自由函数。
<{#myfunc att1=$arr.title att2='8'}>
att1==这是数组的title值, ok,嗯很大很长!---att2==8
5、固定foreach块循环标签
<{foreach from=$arr key=k item=v}>
<{$k}> -- <{$v}><br />
<{/foreach}>
from 的变量允许使用静态成员函数,如:from="mod_test::get_datas($xxx)",不过一般,如果在前台,不建议这样使用,而是去定义一个block循环插件。
6、自定义block标循环插件
对应文件为:plugins/block.tagname.php, 相当于函数返回foreach里的from值
<{myblock key=k item=v}>
<{$k}> -- <{$v}><br />
<{/myblock}>
7、include 语法
<{include file='footer.tpl' }>
8、rewrite标签
<{rewrite}>URL<{/rewrite}>
当检测到 $GLOBALS['config']['use_rewrite']==true 此标签才有用,它会自己替换成<rw>URL</rw>,这样在模板解释结束后,进行二次替换,最终才得到替换后的url,由于这种操作要对整个模板涉及的url进行替换,实际上性能比较一般,如无必要,建议还是在程序开发时就规划好这些url,没必要用这标签处理。

 

分享到: