tpl 类实际上对smarty进行简化封装,它的成员方法都是静态方法,因此使用是相当简单的。
1、在这个类中,实际上主要是先通过 public static function init () 初始化 smarty 对象,并设定好相关参数,因为在所有操作中都会先调用一下这个方法,所以实际上使用时是不用理会它的。
使用方式很简单,这里以一个实例来说明:
-
-
-
- public function get_code()
- {
- $accctl = cls_access::get_instance();
- if( $accctl->fields['sta']==-1 )
- {
- cls_access::show_message ('', '你的帐号目前处于被冻结状态,系统暂时停止为你分配推广渠道。', '-1', 3000);
- exit();
- }
- $url = pub_users::get_url($accctl->fields['userid'], $accctl->fields['site']);
- if( $accctl->fields['sta'] != 5 )
- {
- tpl::display('index.get_code.wait.tpl');
- exit();
- }
- tpl::assign('un_url', $url );
- tpl::display('index.get_code.tpl');
- exit();
- }
实际上,我们大多数情况下使用到的都是只有 assign 和 display,至于一些调用范围较多的变量,并不建议直接 assign 而是通过smarty动态触发的插件来处理。
这里需注意的是
tpl::display('index.get_code.tpl');
就是这个模板文件名,在 index.php 没指定 $config_appname 的情况下,它是在 templates\template 这目录的,指定了的情况下是在 templates\template\$config_appname
不过如果要在模板内使用 include 标签,那么,include 指定的文件是相对于 templates\template 这目录的。
2、模板标签与约定
(1) 标签一律用 <{ }> 这种格式,而不是 { },这样可以防止HTML里出现css或js代码而不兼容。
(2) 自定义的插件均放在 smarty_plugins 这文件夹。
(3) 可以用 myblock.lurd_*.php 去定义一个自动返回二维数组,并进行foreach循环的插件,如:myblock.lurd_article.php
- <?php
-
-
-
-
-
-
-
-
-
-
- function smarty_myblock_lurd_article($_params, &$compiler)
- {
- $num = emptyempty($_params['num']) ? 8 : intval($_params['num']);
- $cid = emptyempty($_params['cid']) ? 0 : intval($_params['cid']);
- $sid = emptyempty($_params['sid']) ? 0 : intval($_params['sid']);
- $orderway = emptyempty($_params['orderway']) ? 'desc' : $_params['orderway'];
- $orderby = emptyempty($_params['orderby']) ? 'aid' : intval($_params['orderby']);
- $cond = '';
-
- if($orderby == 'hot')
- {
- $i = 0;
- $cache_db = cls_cache_db::factory('archives');
- if( emptyempty($cache_db->tables['archives']['datas'][0]) )
- {
- return array();
- }
- $sortlists = smarty_myblock_lurd_article_hot();
- foreach($cache_db->tables['archives']['datas'][0] as $pri => $row)
- {
- if( isset($sortlists[$pri]) )
- {
- $sortlists[$pri][1][] = $row;
- }
- }
- $datas = array();
- $cond = $sid > 0 ? 3 : ( $cid > 0 ? 2 : 1 );
- foreach($sortlists as $k=>$v)
- {
- $arow = $v[1][0];
- if($cond==3)
- {
- if($arow['sid']==$sid) {
- $arow['click'] = $v[0];
- $datas[] = $arow;
- $i++;
- }
- }
- else if($cond==2)
- {
- if($arow['cid']==$cid) {
- $arow['click'] = $v[0];
- $datas[] = $arow;
- $i++;
- }
- }
- else
- {
- $arow['click'] = $v[0];
- $datas[] = $arow;
- $i++;
- }
- if( $i>=$num )
- {
- break;
- }
- }
- return $datas;
- }
-
- else
- {
- if( $cid>0 ) {
- $cond = " @cid=$cid ";
- }
- if( $sid>0 ) {
- $cond = " @sid=$sid ";
- }
- $sql = "Select * From archives where 1 $cond order by {$orderby} {$orderway} limit $num";
- $datas = cls_cache_db::select_sql($sql);
- if( !is_array($datas) ) return array();
- }
- return $datas;
- }
-
-
-
-
- function smarty_myblock_lurd_article_hot()
- {
- $datas = array();
- $data = cls_cache_db::select_sql("Select * From tongji where 1 order by count desc limit 0");
- foreach($data as $row)
- {
- $datas[$row['aid']][0] = $row['count'];
- }
- return $datas;
- }
-
- ?>
-
1、定义模板变量或给模板变量赋值
tpl::assign ($tpl_var_name, $value)
2、显示视图(显示解析运行后的模板)
tpl::display ($tpl, $is_debug_mt=true)
$is_debug_mt 是否调试内存(如果想要实时获得程序在某代码断使用了多少内存,可以用 test_debug_mt( msg ) 在该处调试,debug信息会显示出这些地方内存占用情况)
3、获取解析运行模板后的内容
tpl::fetch( $tpl )
$tpl 是相对于 templates/template 目录的,因此如果你的模板里有include其它子目录模板,应该加上目录名,如果应用在子目录,也可以在 index.php 用 $config_appname = 'appname' 指定目录名,那样$tpl可以省略目录名,但是如果是在smarty模板进行include的情况则是必须指定全名的。
|