[hu60t手册]四、使用模板引擎
现在,回到我们在上一节举的例子,你已经建立了page/test/aa.php,然后该怎么做呢?像平常一样echo标记?当然不是。
在hu60t中,php的作用是完成应用的逻辑过程,比如读取数据库等操作。而页面的显示,应该交给模板引擎解决。
第一步,初始化模板引擎:
<?php
hu60::start();
/*
现在Smarty模板引擎就被初始化了,它的变量名是 $tpl
接下来,设置一些变量给模板引擎,以便在模板中显示:
*/
$tpl->assign('aa','这是aa');
$tpl->assign('bb','这是bb');
$tpl->assign(array('cc'=>10086,'dd'=>10010,'ee'=>10000));
/*
最后一步:显示模板
*/
$tpl->display('tpl:aa_test');
?>
现在,访问m.php/test.aa.xhtml看看吧。
什么,提示“该页未找到”?当然啦,模板文件还没有建立嘛。
那好,我现在就去建立一个模板。可是它的文件名应该是什么?
所以,这就涉及了模板文件定位的问题,这又是一个相当复杂的规则。
2. 模板文件定位
先来看模板路径的表达式。和先前一样,[]里的部分可省
tpl:[cid.]name[.bid]
这里的cid与bid和php文件定位里的含义一样。
name是模板文件的名称,只要不含点(.)就行。但建议只用小写字母、数字、下划线和减号。
如果cid和bid省略,则用当前页面的cid和bid代替。例,tpl:aa_test,在m.php/test.a.xhtml下就相当于tpl:test.aa_test.xhtml,在m.php/test.aa.wml下就相当于tpl:test.aa_test.wml
可以同时省略cid和bid(写成tpl:aa_test),或者只省略bid(写成tpl:test.aa_test),但是不能只省略cid。如果你写tpl:aa_test.wml,hu60t会认为aa_test是cid,wml是name。
得到cid、name和bid之后,就可以定位tpl文件了。
hu60t会首先查找page/cid/name.bid.tpl
如果不存在,查找page/cid/name.tpl
如果不存在,查找page/error/no_tpl.bid.tpl
如果不存在,查找page/error/no_tpl.tpl
是不是和php文件定位很相似呢?
在本例中,你可以只建立一个模板文件(page/test/aa_test.tpl),使用hu60t的扩展标记实现wml/xhtml兼容。
你也可以写两个模板,一个page/test/aa_test.wml.tpl,一个aa_test.xhtml.tpl。当访问m.php/test.aa.wml和m.php/test.aa.xhtml时,hu60t会自动选择对应的模板调用(在你没有通过tpl:cid.name.bid指定bid的情况下)
所以一般情况下,我们都不指定bid。调用当前目录的tpl用 $tpl->display('tpl:name'); 调用其他cid下的模板用 $tpl->display('tpl:cid.name');
嗯,就是这样。下一节将谈怎样写一个wml/xhtml兼容的模板。