zoukankan      html  css  js  c++  java
  • PHP从入门到精通——读书笔记(第21章:Smarty模板技术)

    第二十一章:Smarty模板技术

    1:简介:Smarty是PHP中的一个模板引擎。使用PHP编写,它将一个应用程序分成两部分实现:视图和逻辑控制。目的就是讲UI(用户界面)和PHP code(PHP代码)分离。这样程序员在修改程序时不会影响到页面设计,而美工在重新设计或修改页面时也不会影响程序逻辑
    Smarty与MVC:Smarty这种开放模式,是基于MVC框架概念的。

    2:安装配置
    下载并解压,得到一个libs目录,复制libs目录到服务器根目录下,并为其重命名,一般该目录的名称为smarty或class等。
    1)新建一个www网站应用程序目录,命名为1,复制Smarty到目录下,在Smarty目录下新建4个目录,分别是templates、templates_c、configs和cache

    2)新建一个.html静态页,输入以下数据,将文件保存到刚新建的templates目录下,命名为index.html

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html;charset=gb2312" />
    <title>{ $title }</title>
    </head>
    
    <body>
    { $content }
    </body>
    </html>

    {$title}、{$content}是smarty标签,大括号{}是标签的定界符,$title和$content为变量。

    3)回到上级目录,在“目录/1/”下新建一个.php文件,使用smarty变量和方法对文件进行操作,输入完毕后保存为index.php

    View Code
    <?php
    /*  定义服务器的绝对路径  */
    define('BASE_PATH', $_SERVER['DOCUMENT_ROOT']);
    /*  定义Smarty目录的绝对路径  */
    define('SMARTY_PATH', '\1\Smarty\\');
    /*  加载Smarty类库文件  */
    require BASE_PATH.SMARTY_PATH.'Smarty.class.php';
    /*  实例化一个Smarty对象  */
    $smarty = new Smarty;
    /*  定义各个目录的路径  */
    $smarty->template_dir = BASE_PATH.SMARTY_PATH.'templates/';
    $smarty->compile_dir = BASE_PATH.SMARTY_PATH.'templates_c/';
    $smarty->config_dir = BASE_PATH.SMARTY_PATH.'configs/';
    $smarty->cache_dir = BASE_PATH.SMARTY_PATH.'cache/';
    
    /*  使用Smarty赋值方法将一对名称/方法发送到模板中  */
    $smarty->assign('title', '第一个Smarty程序');
    $smarty->assign('content', 'Hello, Welcome to study \'Smarty\'! ');
    
    /*  显示模板  */
    $smarty->display('index.html');
    ?>

     这一步是Smarty运行最关键的核心步骤,主要进行了两项设置两步操作
    A:加载Smarty类库,也就是加载Smarty.class.php文件,这里使用的是绝对路径
    B:保存新建的4个目录的绝对路径到各自的变量
    C:给模板赋值,assign()就是赋值方法
    D:显示模板

    打开浏览器,运行index.php文件,运行结果:Hello,Welcome to study ''Smarty!

    4)assign 方法—— assign用于在模板被执行时为模板变量赋值,语法如下:
    {assign var=" " value=" "}    参数var是被赋值的变量名,参数value是赋给变量的值

    5)display 方法——用于显示模板,需要指定一个合法的模板资源的类型和路径,还可以通过第二个可选参数指定一个缓存号.第三个参数用于指定编译号。编译号可以讲一个模板编译成不同版本使用
    void display (string template [, string cache_id [, string compile_id ]])

    3:Smarty 模板设计
    1)Smarty模板文件——是由一个页面中所有的静态元素,加上一些定界符“{...}”组成的。模板文件统一存放位置是templates目录。模板中部允许出现PHP代码段。Smarty模板中的所有注释、变量、函数等都要包含在定界符内。

    2)注释——{*  这里是注释  *}

    3)变量——Smarty中的变量来自3部分:
    A:PHP页面中的变量——也就是assign()方法传过来的变量。使用方法和PHP中医院,也需要使用$符合。略有不同的是对数组的读取,使用.符号,如在php中是$arr->type,而smarty中是$arr.type(也可以使用下标来访问,和PHP一样:$arr[0])

    View Code
    <html>
    <head>
    {* 页面的标题变量$title *}
    <title>{ $title }</title>
    </head>
    
    <body>
    购书信息:<p>
    {* 使用索引取得数组的第一个元素值 *}
    图书类别:{ $arr[0] } <br/>
    {* 使用键值取得第二个数组元素值 *}
    图书名称:{ $arr.name }<br/>
    {* 使用键值取得二维数组的元素值 *}
    图书单价:{ $arr.unit_price.price } / { $arr.unit_price.unit }
    </body>
    </html>
    View Code
    <?php 
    /* 载入配置文件 */
        include '../config.php';
    /* 声明数组 */
        $arr = array('computerbook', 'name'=>'PHP从入门到精通', 'unit_price'=>array('price'=>'¥65.00', 'unit'=>'本'));
    
    /* 将标题和数组传递给模板 */
    $smarty->assign('title', '使用Smarty读取数组');
    $smarty->assign('arr', $arr);
    
    /* 要显示的模板页面 */
    $smarty->display(02/index.html);
    ?>

    B:保留变量

    C:从配置文件中读取数据——调用配置文件中变量的格式有两种:
    a:使用”#“好,将变量名置于两个”#“中间
    b:使用保留变量中的$smarty_config.来调用配置文件

    configs/04.conf文件

    title = "调用配置文件"
    bgcolor="#f0f0f0"
    border="5"
    type="计算机类"
    name="PHP从入门到精通"

    templates/04/index.html文件

    View Code
    { config_load file = "04.conf" }
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    </head>
    
    <body bgcolor="{#bgcolor#}">
    
    <table border="{#border}">
    
    <tr>
        <td>{$smarty.config.type}</td>
        <td>{$smarty.config.name}</td>
    </tr>
    
    </table>
    
    </body>
    </html>

    index.php文件

    include_once '../config.php';
    $smarty->display('04/index.html');

    4)修饰变量——有时不仅要取得变量值,还要对变量进行处理,变量修饰的格式如下:
    { variable_name | modifer_name:parameter1:... }
    variable_name为变量名称,modifer_name为修饰变量的方法名。变量和方法之间用”|“分隔。parameter1是参数值,多个参数用”:“分隔

    在对变量进行修饰时,还可以同时使用多个方法,每种方法之间用”|“分隔。

    变量中的字符(包括空格):{$str|count_characters:true}
    使用变量修饰符后:{$str|nl2br|upper}

    5)流程控制—— {if 条件语句1}{else}....
    在上述条件语句中,除了使用PHP中的<、>、=、!= 等常见运算符外,还可以使用eq、ne、neq、gt、lt、lte、le、gte、ge、is even、is odd、is not even、is not odd、not、mod、div by、even by、odd by等修饰词修饰

    {foreach name=foreach_name key=key item=item from=arr_name}
    {/foreach}
    name为该循环的名称;key为当前元素的键值,item是当前元素的变量名;from是该循环的数组。其他item和from是必要参数

    另一个循环语句:section,该语句用于比较复杂的数组,结构如下:
    {section name="sec_name" loop=$arr_name start=num step=num}
    参数含义:name是该循环的名称;loop为循环的数组;start是循环的初始位置,step表示步长

    这些方法在使用上和assign、display基本一样

    4:将Smarty的配置方法封装到类中
    system.smarty.inc.php

    View Code
    require("../Smarty/Smarty.class.php");
    
    class SmartyProject extends Smarty{
    
             function SmartyProject(){
             
                      $this->template_dir = "./";
                      $this->compile_dir = "../Smarty/templates_c/";
                      $this->config_dir = "../Smarty/configs/";
                      $this->cache_dir = "../Smarty/cache";
             }
    }

    在system.inc.php中对类进行实例化,根据返回的对象名称调用Smarty中的方法,返回对象名为$smarty

    require("system.smarty.inc.php");
    $smarty=new SmartyProject();
  • 相关阅读:
    在过滤器中验证接口中的Token
    导出EXCEL的 两个方法
    调用webservice接口,返回xml(String)转义
    时间类的操作
    jvm 内存解析以及jvm调优
    redis springMVC 配置与应用
    题目2 成绩排序
    题目1 排序
    题目1042:Coincidence
    题目1131:合唱队形
  • 原文地址:https://www.cnblogs.com/mumue/p/2849649.html
Copyright © 2011-2022 走看看