注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

牧笔临风

己有能,勿自私!

 
 
 

日志

 
 
 
 

smarty 注意事项  

2012-03-01 10:09:29|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
来自:http://www.r9it.com/wzkf/php/html/132.html

1:模板引擎就是把后天程序和前台代码分开。
工作原理
他吧模板和php程序合成一个新的文件,输出这个新的文件。
首先访问php文件,然后php文件加载模板引擎,模板引擎在加载模板文件
然后模板引擎把php文件里的变量 替换到模板文件
里,生成一个新的编译文件,然后php文件在加载这个编译文件,输出结果。
1:模板引擎只是使用PHP开发的一个项目,不是PHP语法和扩展等。

smarty介绍:
1:主要是应用 Smarty.class.php。这个文件里的类,
    $smarty = new smarty();
    给模板传值的方式  用$smarty->assign("key","value");
    加载模板文件用 $smarty->display("模板文件名");
    常用配置:
        include_once '../libs/Smarty.class.php';
        $smarty = new Smarty();
        $smarty->compile_dir="../complite_c";
        $smarty->config_dir="../config";
        $smarty->template_dir="../complate";
        //$smarty->left_delimiter="{";
        //$smarty->right_delimiter="}";

2:使用时需要注意的问题
    a:引擎里所有的目录,比如img图片啊,包含文件啊,都是以php文件为主,
    因为我们访问的是Php文件,而模板是在php中包含的内容。所以在模板中使用图片
    CSS文件,js文件,都要以访问php目录为主。

   b:所有display模板时(还是模板中include 包含文件时)
都要以smarty对象中compile_dir指定的模板目录 为基目录,然后再指定相应的模板。

   c:如果想让各个目录下的PHP程序都可以加载Smarty和使用Smarty指定的配置目录(也就是加载配置文件)
    唯一的办法就是使用绝对路径。

4:模板中的注释:
模板注释被*号包围,例如 {* this is a comment *} (其实就是左右分隔符在加上一对*号)
smarty注释不会在模板文件的最后输出中出现.在编译文件中都不会出现。
它只是模板内在的注释.

5:模板samrty中使用的变量
smarty中是以变量为主的,所有的访问方式都是基于变量的。



在smarty模板中使用自定义函数。
    一:注册函数
    在smarty模板中调用php函数不是像普通的那种似地。是以自定义标记(类似于HTML标记)的形式使用
    而标记里的属性是以数组形式传递到自定义函数里的。
    例如:在模板里用自定义标签:hm(这是一个font标签)
     {hm num=5 content='haoming' color='red' size=5}
    然后再php文件里写一个自定义函数。函数名是随便起的:
    function demo($arr){
        for($i=0;$i<$arr['num'];$i++){
            $html.='<font size="'.$arr['size'].'" color="'.$arr['color'].'">'.$arr['content'].'</font><br>';
        }
        return $html;
    }
    然后就需要注册下这个函数,可以让模板使用了。
    需要使用注册函数:$smarty->register_function("hm","demo");
    这句话的意思就是把我们之前定义的demo函数,注册到hm这个函数里,在模板里就可以使用hm这个标签了。
    结果就会输出5行 haoming.

    二:注册块元素。
    像类似于div这种就是快的了,有始有终,<div>  </div>
    注册块标记和上面的单标记差不多
    只是函数有点不同,还是以上个函数为例,只不过,参数得改变,第一个参数$arr为标记里的属性。
    第二个为块中的内容。后面的两个为引用参数。随意起,用不着,到也得写。
        function demo2($arr,$content,&$smarty,&$b){
            for($i=0;$i<$arr['num'];$i++){
            $html.='<font size="'.$arr['size'].'" color="'.$arr['color'].'">'.$content.'</font><br>';
            }
            return $html;
        }

       在用注册块函数, 注册块的函数为:$smarty->register_block("hm2","demo2");
    模板里写:
           {hm2 num=5 content='haoming' color='red' size=9}
           wwwwwwwwwwwwwwwwwwwwwwwwwww
           {/hm2}
    这就会输出5行wwww……内容。
    总结:属性的值也可以用传值变量。如果是数组,就需要用`$row.name`这个是反引号,键盘数字1旁边的那个。

    第二种定义函数和块的方法,在插件目录里。在smarty目录里plugins为插件目录,
    以function 为开头的为单函数
    以modifier为开头的为调节器函数
    以block为开头的函数为块函数。
    所以在插件里定义文件名是得以规则来顶,例如。function.hm.php  function为区分类型,hm为函数名。

    定义单函数插件
    函数名为 smarty_function_hm($arr,&$smarty){}
    这个和上面定义是差不多的,只是名称必须按规格来,且参数需注意,第一个为属性数组,第二个为引用smarty
    例如:在plugins目录下新建funtion_hm.php
    写入:
    function smarty_function_hm($arr,&$smarty){
        $html.="";
        for($i=0;$i<$arr['num'];$i++){
        $html.=$arr['content']."<br>";
        }
        return $html;
    }
    模板里写入:  {hm num=3 content='hhhhhhhhhhh'}
    结果就会输出3行hhhhhhh……

    块元素插件和上面的基本雷同。例如:
    在插件目录下新建block.hm2.php文件, 然后写入:
    function smarty_block_hm2($arr,$content,&$smarty){
         $html.="";
        for($i=0;$i<$arr['num'];$i++){
        $html.=$content."<br>";
        }
        return $html;
    }
    在模板里写入:
        {hm2 num=3}
        aaaaaaaaa
        {/hm2}
结果就输出:3行aaaaa……
………………………………………………………………………………………………………………………………………………
总结:smarty里的函数有两种,内建函数和自定义函数。
自定义函数有两种方式,用注册函数和用插件的方式完成。
  评论这张
 
阅读(341)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017