PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > Smarty教程 > 正文

    smarty3从入门到精通详解(一)

    作者:admin来源:PHP自学中心浏览:时间:2020-09-30 00:07:50我要评论
    导读:1、安装Smarty3.1.4一、什么是smarty?smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要...
    1、安装Smarty3.1.4
     

     

    一、什么是smarty?

    smarty是一个使用PHP写出来的模板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的地方:

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

    2. 小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用smarty会丧失php开发迅速的优点。

    打开smarty的官方网站,www.smarty.net/download.php。下载Smarty 3.0rc4,

    目前仍然是处于rc版本(Release.Candidate.就是发行候选版本,与beta版本相比,不再有功能的增加,主要着重于除错!)。

    有tar.gz和zip分别适用于linux和windows版本。

    2.调试Smarty3

     
     

    1,下载好后tar –zxvf Smarty 3.0rc4.tar.gz

    目录中,demo文件夹为示例文件。Libs为程序文件。

    /libs/Smarty.class.php   #主文件

    /libs/sysplugins/  #内部plugin

    /libs /plugins/   #外部plugin,可自由扩充

    /demo/cahce/   #放置缓存文件

    /demo/configs /   #放置可以载入的配置文件

    /demo/templates/   #放置模板文件

    /demo/templates_c/    #放置对模板编译后的文件

    最好在需要进行smarty处理的文件的目录中创建与demo中的相同的文件夹(注意文件夹具有web用户写权限),

    当然也可以更改文件夹名和路径,默认值为处于被smarty处理的文件的同级目录。Smarty3.1.4需要php5.0以上。

    2、调试Smarty3.1.4

    创建自己的文件,比如index.php。

    在templates目录中创建模板index.tpl(几乎可以是任何文本文件的扩展名,常用的是tpl,php,html,不建议使用后两者,因为可以从浏览器直接访问而不安全。可以对apache的httpd.conf进行设置,禁止直接访问.tpl文件。或者将templats目录放在网站文档树之外。)

    [Index.php]

    require_once(“../../Smarty-3.0rc4/libs/Smarty.class.php”);

    $smarty = new smarty();

    $smarty->assign(‘name’,’韩灵稚’);

    $smarty->display(‘templates/index.tpl ‘);

    [Index.tpl]的代码:

    <html><body>

    <span>你好, {$name}</span>

    </body></html>

    Smarty编译时的处理过程是源php文件->模板文件(可能多次调用)->源php文件。。。

    也就是说不影响原php文件的其他处理和输出。所以smarty模板文件可以是完整的html,也可以是其中一部分。

    3、Smarty3.1.4基础
     
     

    3.1 smarty处理过程

    smarty将php源文件,首先编译成中间文件(也是php),如果启用缓存,再根据编译文件生成缓存文件(也是php),需要缓存的部分全部是硬编码。

    之后的每次访问都会访问编译文件(如果编译文件已经存在),一次编译多次调用(可以是单文件的多次,也可以是多文件的多次),

    如果启用缓存且有缓存文件而且没有过期,则直接访问缓存文件,跳过编译文件。编译文件一经生成,就不会被自动更新,除非模板文件或者配置文件更改。

    源php文件修改是不会引发重新编译的。一旦编译文件重新生成,缓存文件也必然重新生成。

    Smarty允许有两种特殊的编译设置存在:

    1、 任何时候都不自动重新编译(上线阶段):只有没有该文件的编译文件时才生成,

    模板文件或者配置文件的更改,不会引发重新编译。

    $smarty->setCompile_check(false)

    #默认为true,false表示任何时候都不在发生文件变更的情况下生成编译文件,除了无编译文件。

    $smarty->getCompile_check()    #获得当前编译检查的设置

    2、任何时候都重新编译(调试阶段):任何时候都重新编译。

    $smarty->setForce_compile(true)  #默认为false,true表示每次都重新编译(启用缓存的话,每次都重新缓存)

    $smarty->getForce_compile()    #获得当前强制编译的设置

     

    3.2 分界符

    在模板文件中,区分普通html代码和smarty代码靠的是分界符。默认情况下是“{ }“,但是与js和css相冲突。

    可以进行变更。在3.0中模板标签将不支持空格,如{ $abc }在Smarty2中可以识别的,

    但是3.0里头就不行了,必须这样{$abc},这样是为了能够更好的支持javascript和css。

    $smarty->left_delimiter = “<{“;   #左分界符,2.0属性,3.0沿用

    $smarty->right_delimiter = “}>”;   #右分界符,2.0属性,3.0沿用

    注意:将默认分界符修改后,在3.0模板中仍然不支持空格,比如<{ $abc }>,无效。

     

    3.3 注释

    {* smarty用*包含的文字为注释内容 *}

    如果默认分界符修改为“<{}>“, <{* smarty用*包含的文字为注释内容 *}>。注释中的模板变量无效。

     

    3.4 模板包含文件

    格式 {include file=”要包含的文件名称 “}

    Head.tpl

    <span>这是顶部内容,欢迎你,{$name}</span><hr />

    Index.tpl中加一下代码

    {include file=”head.tpl”}

    输出结果:

    这是顶部内容,欢迎你,韩灵稚。

    您好,韩灵稚!

    除了包含其他配置文件,还可以包含html、php(需要开启smarty支持php模板的选项,

    最好使用include_php函数)。包含文件还可以使用传参。

    Head.tpl

    <span>{$nr},欢迎你,{$name}</span><hr />

    Index.tpl

    {include file=”head.tpl” nr=”这是顶部内容”}

    输出结果同上。

     

    3.5 载入配置文件

    可以预先规定一系列的变量与值的对应,并放在配置文件中,在使用时载入。

    配置文件一般放在configs文件夹中,可以自定义。

    My.conf

    gv = “my.conf中的全局变量”   #全局配置变量,任何时候调用,都将被载入

    #如果$sections,未设置,显示全部变量

    [color]   #局部配置变量

    fontcolor = “red”   #如果$sections,设置为red,只显示全局变量和[color]中的变量

    [size]  #局部配置变量

    fontsize = “12px”   #如果$sections,设置为size,只显示全局变量和[size]中的变量

    调用配置文件有两种方法,一种是在源文件处,一种是在模板文件处。

    源文件处:$smarty->configLoad($config_file, $sections = null)

    模板文件处:{config_load file=”载入的配置文件” section=”选取的局部变量(可选)”scope=“作用模板范围(可选)“}

    如果使用源文件的方法,载入的配置文件变量的作用模板范围自动为global,

    而且可以应用到多个模板中(smarty对象调用了多个模板)。

    如果使用后者,灵活性更大。单个模板中config_load的scope参数的范围可以是local

    (本模板,只能本模板使用这些变量), parent(父模板或者文件) 或

    global(同一个smarty对象所调用的所有模板,其他模板不需要再载入该配置文件)

    在模板文件中使用配置变量

    {#配置变量#}或者{$smarty.config.变量名称}

    【相关函数】

    $smarty->getConfigVariable($variable)    #返回某个模板变量,该变量必须是parent或者是global

    $smarty->getConfigVars($varname = null)   #返回模板变量数组,或者单个变量。

    该变量或者变量组必须是parent或者是global

    $smarty->clearConfig($varname = null)  #清除所有配置变量或者指定的一个配置变量

    $smarty->setConfig_overwrite(false)   #如果设变量为真,则从配置文件中读取出来的变量(如果变量名称相同)

    将会由最后一个值覆盖。反之,变量将会放到一个数组中。

    不能用数组索引去访问,可以使用cycle函数。该属性也有getConfig_overwrite函数。

    $smarty->setConfig_booleanize(true);   #设置为true的话,

    配置文件中的on/true/yes/1 和 off/false/no/0值会自动转化为布尔值,

    false将变为字符串(如果作为判断条件,永远为真)。

    该属性也有getConfig_booleanize函数。

     

    3.6 环境配置

    Smary脚本中是可以动态设置编译、模板、缓存、配置路径。

    $smarty->template_dir = “./templates”;    #设置模板目录,2.0设置方法,3.0沿用但不推荐

    $smarty->compile_dir = “./templates_c”;   #设置编译目录,2.0设置方法,3.0沿用但不推荐

    $smarty->config_dir = ‘./configs/’;        #设置配置目录,2.0设置方法,3.0沿用但不推荐

    $smarty->cache_dir = ‘./cache/’;         #设置缓存目录,2.0设置方法,3.0沿用但不推荐

    Smary在3.0中对属性进行了封装。可以使用如下方法进行访问获得目录。

    $smarty->getCacheDir();   #得到当前缓存目录路径

    $smarty->getTemplateDir();   #得到当前模板目录路径的数组

    $smarty->getConfigDir(); #得到当前 配置目录路径

    $smarty->getCompileDir(); #得到当前编译目录路径

    $smarty->getPluginsDir()   #得到当前插件目录路径数组

     

    同样用下面的方法进行目录设置

    $smarty->setTemplateDir(“../smarty1/templates/”);    #设置新的模板目录,

    注意设置后模板目录的数组只有该值一个,不管原来有几个值。

    $smarty->setCompileDir(“../smarty1/templates_c/”);   #设置新的编译目录

    $smarty->setConfigDir(“../smarty1/configs/”);        #设置新的配置目录

    $smarty->setCacheDir(“../smarty1/cache/”);         #设置新的缓存目录

    $smarty->addTemplateDir(“templates”);     #引用的模板文件的路径必须在模板目录数值中,

    否则报错,由于仍然用原来的模板文件,所以添加上原来模板路径,这样模板数组中有两个路径。

    $smarty->addPluginsDir(‘myplugins’);   #添加一个新的插件目录,如果用set将取消插件数组,变为单指

    【相关函数】

    $smarty->utility->compileAllTemplates($extention = ‘.tpl’, $force_compile = false,

    $time_limit = 0, $max_errors = null)   #直接编译所有模板目录下所有模板文件,用处不大。

    $smarty->utility->clearCompiledTemplate($resource_name = null,

    $compile_id = null, $exp_time = null)   #清除编译目录下的编译文件或者指定条件的编译文件。

    $smarty-> setDefault_template_handler_func($fucname)

    #该函数在模板不能从它的源目录下获取时会得到调用,没有太大的意义,可以设置异常处理。

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-84-4963-1.html
    相关热词搜索: