zoukankan      html  css  js  c++  java
  • smarty 基本介绍及示例

    什么是smarty?

           Smarty是一个使用PHP写出来的模板引擎,是业界最著名的PHP模板引擎之一。Smarty分离了逻辑代码和外在的内容,提供一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。Smarty工作的目的是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。

    为什么会诞生smarty?

          例如在一个公司,一个应用程序的开发流程如下:在提交计划文档之后,界面设计者[美工]制作了网站的外观模型,然后把它交给后台程序员。程序员使用PHP实现商业逻辑,同时使用外观模型做成基本架构。然后工程被返回到HTML页面设计者继续完善。就这样工程可能在后台程序员和页面设计者之间来来回回好几次。由于后台程序员不喜欢干预任何有关HTML标签,同时也不需要美工们和PHP代码混在一起;美工设计者只需要配置文件,动态区块和其他的界面部分,不必要去接触那些错综复杂的PHP代码。因此,这时候有一个很好的模板支持就显得很重要了。

    smarty主要优点:

    1.速度:采用Smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。

    2.编译型:采用Smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下)

    3.缓存技术:Smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件。

    4.插件技术:Smarty可以自定义插件插件实际就是一些自定义的函数。

    5.模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。

    不适合使用Smarty的地方:

    需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新,这类型的程序使用smarty会使模板处理速度变慢。

    小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用Smarty会在一定程度上丧失PHP开发迅速的优点。

    (PS:不过为了整个项目的规范,请大家尝试去使用模板引擎。其实习惯了,开发速度会更加快,以上是没有用习惯模板引擎的开发者遇到的问题)

    smarty简单示意图:

    简单介绍smarty.class.php类的大体内容,如下:

     1 <?php
     2  
     3 class Smarty  //此类就是libs中的Smarty.class.php类
     4 {
     5     public $leftlimit="<{";  //左分隔符
     6     public $rightlimit="}>";//右分隔符
     7     public $attr;  //存放变量信息的数组
     8      
     9      
    10     //注册变量
    11     function assign($k,$v)
    12     {
    13         $this->attr[$k] = $v;  //向数组中添加一个值,相当于$sttr[0]="sdc123"
    14     }
    15      
    16     //显示模板
    17     function display($name)
    18     {
    19         //1.造模板路径
    20         $filename = $mubanlujing.$name;
    21          
    22         //2.获取模板内容,内容是一大串代码,(例如模板为index.html)
    23         $str=file_get_contents($filename);
    24          
    25         /*$str里面的代吗内容
    26         <html>
    27         <head>
    28         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    29         </head>
    30         <body>
    31         <div>{$aa}</div>
    32         </body>
    33         </html>
    34         */
    35          
    36         //3.用正则去匹配字符串中出现的{}里面的内容
    37          
    38         //4.将内容读取(读取到的是数组里面的key),拿key去数组attr里面取value值
    39          
    40             /*$str里面的代码内容
    41             <html>
    42             <head>
    43             <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    44             </head>
    45             <body>
    46             <div><?php echo $attr[key]?></div>
    47             </body>
    48             </html>
    49             */
    50          
    51         //5.将str里面的内容保存在缓存文件里面
    52         file_put_contents($filename,$str);//$filename是新的文件
    53          
    54         //6.将存储的文件加载到当前页面
    55         include(filename);
    56     }
    57      
    58 }

    配置文件init.inc.php:

     1 <?php
     2 
     3 define("ROOT",str_replace("\","/",dirname(__FILE__)).'/'); //常量ROOT中指定项目根目录
     4 
     5 //echo str_replace("\","/",dirname(__FILE__))."/";
     6 
     7 require ROOT.'libs/Smarty.class.php'; //加载Smarty类文件
     8 
     9 $smarty = new Smarty(); //实例化Smarty对象<br>
    10 
    11 
    12 //$smarty -> auto_literal = false; //就可以让定界符号使用空格
    13 $smarty->setTemplateDir(ROOT.'templates/'); //设置所有模板文件存放位置
    14 //$smarty->addTemplateDir(ROOT.'templates2/'); //添加一个模板文件夹
    15 $smarty->setCompileDir(ROOT.'templates_c/'); //设置编译过的模板存放的目录
    16 $smarty->addPluginsDir(ROOT.'plugins/'); //设置为模板扩充插件存放目录
    17 $smarty->setCacheDir(ROOT.'cache/'); //设置缓存文件存放目录
    18 $smarty->setConfigDir(ROOT.'configs/'); //设置模板配置文件存放目录
    19 
    20 $smarty->caching = false; //设置Smarty缓存开关功能
    21 $smarty->cache_lifetime = 60*60*24; //设置缓存模板有效时间一天
    22 $smarty->left_delimiter = '<{'; //设置模板语言中的左结束符
    23 $smarty->right_delimiter = '}>'; //设置模板语言中的右结束符
    24 
    25 ?>

    smarty简单示例:

    smarty后台代码main.php:

     1 <?php
     2 //引入配置文件
     3 include("./init.inc.php");
     4 
     5 $name = "李四";   //字符串
     6 $age = 22;       //数字
     7 $attr = array("淄博","张店");//索引数组
     8 $arr=array("han"=>"汉族","hui"=>"回族");//关联数组
     9 
    10 class Ren             //
    11 {
    12     public $name = "王五";
    13 }
    14 
    15 $r = new Ren();
    16 
    17 //注册变量
    18 $smarty->assign("name",$name);
    19 $smarty->assign("age",$age);
    20 $smarty->assign("dizhi",$attr);
    21 $smarty->assign("minzu",$arr);
    22 $smarty->assign("ren",$r);
    23 
    24 $smarty->display("main.html");//显示模板

    smarty前端代码 main.html:

     1 <body>
     2 <h1>这是主页面</h1>
     3 <div style="color:#09F">登陆者:<{$name}></div>
     4 
     5 <div>年龄:<{$age}></div>
     6 
     7 <div>地址:<{$dizhi[1]}></div>
     8 
     9 <div>民族:<{$minzu["han"]}></div>
    10 <div>民族:<{$minzu.hui}></div>
    11 
    12 <div style="background-color:#C6C">好友:<{$ren->name}></div>
    13 </body>
    14 </html>

    smarty前端运行页面显示:

     

  • 相关阅读:
    linux用户管理初级(上)
    定时任务实战
    linux定时任务
    Linux 命令行基础(一)
    Linux 操作系统发展历程及系统版本选择
    Linux文件的权限
    Linux硬连接和软连接
    Linux 文件的属性
    linux 正则表达式
    centos7 设置时间同步
  • 原文地址:https://www.cnblogs.com/ds-3579/p/5559483.html
Copyright © 2011-2022 走看看