zoukankan      html  css  js  c++  java
  • Smarty 学习笔记一 安装与使用

    一、安装
    注:这里所使用的Smarty是3.x版本,要求PHP版本为5.2或者更高。
    解压下载下来的Smarty压缩文件,将文件里lib目录下的所有文件复制到项目中的指定目录中,例如"/lib/Smarty/"目录下,在项目中引入"Smarty.class.php"文件后既可使用。
    在Smarty内部会自动定义一个名为SMARTY_DIR的常量,该常量默认指向Smarty.class.php所在的绝对路径,可以通过自行设定该值来改变默认值,如:define('SMARTY_DIR', 
    '/lib/smarty/')注:SMARTY_DIR常量必须以'/'结尾。

    1 //直接引入smarty文件
    2 require_once 'lib/smarty/Smarty.class.php';
    3 //或通过定义SMARTY_DIR常量引入文件
    4 define('SMARTY_DIR', 'lib/smarty/');
    5 require_once SMARTY_DIR . 'Smarty.class.php';
    6  
    7 //实例化一个Smarty对象
    8 $smarty = new Smarty(); 

    在正式使用smarty之前,还需要设定几个基本路径:

    • $template_dir 用于存放smarty模版文件,如果未指定该路径,Smarty会自动在当前目录中寻找模版文件。
    • $compile_dir 用于存放smarty编译后的文件,如果不指定该目录,Smarty会自动在当前脚本所在目录下生成一个名为'templates_c'的目录用于存放生成的编译文件。
    • $config_dir 用于存放smarty配置文件
    • $cache_dir 用于存放smarty缓存文件,如果开启Smarty缓存功能,但没有指定该目录,Smarty会自动在当前脚本所在目录下生成一个名为'cache'的目录用于存放缓存文件。
    1 $smarty->template_dir = 'views/';
    2 $smarty->compile_dir = 'lib/smarty/templates_c/';
    3 $smarty->config_dir = 'lib/smarty/configs/';
    4 $smarty->cache_dir = 'lib/smarty/cache/';
    5 //或者
    6 $smarty->setTemplateDir(''views/';');
    7 $smarty->setCompileDir('lib/smarty/templates_c/');
    8 $smarty->setConfigDir('lib/smarty/configs/');
    9 $smarty->setCacheDir('lib/smarty/cache/');

    配置完成后,可通过Smarty的testInstall()内置方法查看配置信息:

    1 $smarty->testInstall();

    二、使用Smarty
    Smarty配置完成以后,既可通过Smarty调用指定模版,首先在模版文件路径下(这里是'view/')创建一个模版文件home.tpl,内容如下:

     1 <html>
     2    <head>
     3      <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
     4      <title>Home</title> 
     5      <link rel="stylesheet" href="/css/master.css" type="text/css" media="screen" title="no title" charset="utf-8" />
     6    </head>
     7    <body>
     8      Smarty
     9    </body>
    10 </html>

    注:模版文件可以是任意后缀名,为了安全 起见,尽量避免使用.html、.php等可以直接被浏览器解析的文件,当然最好的办法是禁止web浏览器直接访问模版所在文件夹。
    模版的调用
    通过Smarty的内置方法display()来打开一个模版文件
    void display(string templatestring cache_idstring compile_id);
    对与上述方法中涉及到的参数,将会在后面介绍

    1 $smarty->display(home.tpl);

    变量的传递与访问
    同时Smarty也可以通过内置方法assign()向模版文件中传递各种变量,如数值、字符串、数组、对象等。
    void assign(string varnamemixed var,  bool nocache);
    对与上述方法中涉及到的参数,将会在后面介绍

    1 $arr1 = new Array('zh', '26');
    2 $arr2 = new Array('name'=>'zh', 'age'=>26);
    3 $obj = new MyObject();//MyObject为自定义类,包含name等公共属性
    4 $smarty->assign('str', 'zh');//字符串
    5 $smarty->assign('num', 6);//数值型
    6 $smarty->assign('arr1', $arr1);//索引数组1
    7 $smarty->assign('arr2', $arr2);//关联数组2
    8 $smarty->assign('obj', $obj);//对象 

    模版中使用变量:
    在模版中调用变量,通过在变量之前加上$,并使用'{}'边界符将变量括起来,如home.tpl内容如下:

    1 <body>
    2     {$str} <!-- 输出zh -->
    3     {$num} <!-- 输出zh -->
    4     {$arr1[0]} <!-- 输出zh -->
    5     {$arr2.name} <!-- 输出zh -->
    6     {$obj->name} <!-- 输出zh -->
    7 </body> 

    可以看出,Smarty访问通过指定数组的索引来访问索引数组,通过'.'访问关联数组,通过'->'访问对象属性。
    注:默认情况下,左边界符'{'与变量之间不能存在空格,否则变量将不会被解析,而是连同'{' 和 '}'原样显示出来。可以通过设置$smarty->auto_literal = false;来禁止这种 
    行为。
    '{}'是Smarty的默认边界符,可以通过修改$left_delimiter$right_delimiter属性来修改默认边界符,如:

    1 $smarty->left_delimiter = '<{';
    2 $smarty->right_delimiter = '}>';

    Smarty支持模版内部注释,通过使用'{**}',如:{*这里是注释*}。Smarty中的注释与HTML注释<!-- -->有些不同,Smarty中的注释,并不会显示在网页源文件中。
    注:如果修改了Smarty的默认边界符,相应的注释标签也需要变动,如<{*注释*}>,而且以下所有标签边界符均改为该种形式。
    有时可能需要模版忽略变量的解析,而将原文显示出来,如:要在页面中显示出<{$name}>,而不是将$name的变量值显示出来,可以通过<{ldelim}> <{rdelim}>  <{$smarty.ldelim}> <{$smarty.rdelim}>来实现,如:

    <{ldelim}>$name<{rdelim}>
    <{$smarty.ldelim}>$name<{$smarty.ldelim}>

    另一种方法是通过使用Smarty内置块标签<{literal}>,Smarty将会忽略解析出现在该标签之间的所有内容,如:

    1 <{literal}>
    2 这里输入不想被Smarty解析的内容
    3 <{/literal}>

    引号
    与PHP类似,Smarty会解析出现在双引号中的变量,但该变量只能包含数字、字符和下划线,如果包含其它字符,则必须使用"`"(ESC键)将变量包含起来

     1 <{* $tpl_name将会别当作变量解析 *}>
     2 <{include file="subdir/$tpl_name.tpl"}>
     3  
     4 <{* 不会解析任何变量,只有双引号括起来的变量才会别解析 *}>
     5 <{include file='subdir/$tpl_name.tpl'}>
     6  
     7 <{* $smarty.config.myva将会别解析 *}>
     8 <{cycle values="one,two,`$smarty.config.myval`"}>
     9  
    10 <{* $module.contact将会别解析 *}>
    11 <{include file="`$module.contact`.tpl"}>
    12  
    13 <{* $module.$view都将会被解析 *}>
    14 <{include file="`$module.$view`.tpl"}>

    数学表达式
    Smarty支持在模版中直接使用数学表达式,如:

     1 <{$foo+1}>
     2 
     3 <{$foo*$bar}>
     4 
     5 <{* some more complicated examples *}>
     6 
     7 <{$foo->bar-$bar[1]*$baz->foo->bar()-3*7}>
     8 
     9 <{if ($foo+$bar.test%$baz*134232+10+$b+10)}>
    10 
    11 <{$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"}>
    12 
    13 <{assign var="foo" value="`$foo+$bar`"}>

    但并不推荐使用这种方式,应当将更多的逻辑判断放到逻辑业务层中去处理。

  • 相关阅读:
    NYOJ题目28大数阶乘
    网页小图标设置
    Sass中文乱码问题(手动编译和watch编译)
    设计模式之构建者模式(Builder):初步理解
    Struts2之类型转换器
    css设置网页文本选中样式
    由超市临时储物柜引发的一点设计随想...
    前端资源相关参考资料
    Struts2拦截器之ExceptionMappingInterceptor(异常映射拦截器)
    Struts2之OGNL
  • 原文地址:https://www.cnblogs.com/gbyukg/p/2504327.html
Copyright © 2011-2022 走看看