• PHP15 Smarty模板


    学习目标

    • Smarty基本概念
    • Smarty安装和配置
    • Smarty模板设计
    • Smarty流程控制

      

    Smarty基本概念

    一种模板引擎,在系统中进行预处理和过滤数据。是主流的PHP模板引擎,此外PHP中常用的模板引擎还有SimpleTemplate等。

    主要特点:

    1. 强大的逻辑处理能力。
    2. 模板编译能力。把模板编译成高效的PHP语言,编译后的模板为web程序提供高效率渲染请求。
    3. 可选择的缓存。可以设定某些常用模板存储在缓存中,为常用模板提供快速加载功能。
    4. 可设置和可扩展性。smarty基于面向对象开发,具备良好的扩展性。
    5. 长期的应用验证了其安全性。

    Smarty作为PHP Web程序的MVC设计模式中View的具体实现。

    Smarty的安装和配置

    下载最新版本V3.1.32:

    https://github.com/smarty-php/smarty/releases/tag/v3.1.32

    3.x版本要求PHP版本必须为5.2以上。

    下载解压后提取smarty核心目录libs。

    解压到PHP项目中(为了便于项目代码管理,建议创建smarty目录用于存放smarty的libs目录)

    各个目录和文件的作用在samrty模板的配置文件中以注释的方式说明如下:

    <?php
    /**
     * 创建和初始化smarty公共文件(位于smarty/init.inc.php)
     */
    define("ROOT", str_replace("\", "/", dirname(__FILE__) . "/"));//指定项目的根路径
    require ROOT . "/libs/Smarty.class.php";
    $smarty = new Smarty();//实例化模板引擎
    
    
    //配置模板
    $smarty->setTemplateDir(ROOT . "templates/")//自定义模板文件存放目录
    ->addTemplateDir(ROOT . "templates2/")//smarty可以自定义多个模板文件存放目录
    ->setCompileDir(ROOT . 'templates_c')//自定义模板编译后的文件存放目录
    ->setPluginsDir(ROOT . 'plugins/')//自定义模板扩充插件目录
    ->setCacheDir(ROOT . 'cache/')//自定义模板缓存目录
    ->setConfigDir(ROOT . 'configs');//自定义存放模板配置文件目录
    
    $smarty->caching = false; //设置模板缓存开关
    $smarty->cache_lifetime = 24 * 60 * 60;//设置模板缓存有效时间
    $smarty->left_delimiter = '<{';//设置模板语言左结束符
    $smarty->right_delimiter = '}>';//设置模板语言右结束符号
    

      

    编写模板文件test.tpl存放于templates目录下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title><{$title}></title>
    </head>
    <body>
    <{*这是smarty模板的注释*}>
    <{$content}>
    </body>
    </html>
    

      

    编写模板应用程序脚本index.php位于项目根目录下:

    <?php
    require 'smarty/init.inc.php';
    $smarty->assign("title","smarty测试网页标题");
    $smarty->assign("content","smarty测试网页内容");
    $smarty->display("test.tpl");
    

      

    运行index.php效果:

    Smarty模板设计

    主要方法

    1.assign()方法

    语法格式

    void assign(string varname,mixed var);//传递名/值对到模板中
    void assign(mixed var);//传递包含名/值对的关联数组到模板中
    

      

    2.display()方法

    语法格式

    void display(string template[,string cache_id[,string compile_id]]);//获取和显示smarty模板
    

      

    string template可以表示绝对路径或者相对路径。windows平台的绝对路径使用“file:”作为前缀。

    cache_id和compile表示一个页面用于多个缓存时设置。

    Smarty模板基本语法

    1.注释

    <{*这是smarty模板的注释*}>
    

      

    2.变量

    Smarty模板中的变量都是全局的。如果前后多次设置同名变量,则最后的值有效。

    命名规则:与php变量命名规则一致。

    变量可以是:数组,多维数组,对象和属性,对象的方法。

    数组的访问:"."访问关联数组元素,例如:

    <{$arrname.index}>
    

      

    也可以使用PHP语法风格,例如:

    <{$arrname['index']}>
    

      

    对象属性和方法和访问和PHP一致:通过"->"访问。

    3.表达式

    支持在表达式中进行运算、函数的调用、对象属性和方法的调用(需要安全策略支持)。

    {$a+$b}
    {$size=count($arr)}
    {$obj->propername}
    

      

    4.遍历数组

    语法格式:

    {foreach $array as $item}...{/foreach}  //遍历数组$array中的值
    
    {foreach $array as $key=> $value}...{/foreach} //遍历数组$array中索引和值
    

    或者

    {foreach item=value  from=$array}
    

      

    5.引入公共模板文件

    {include file="header.tpl"}
    

      

    6.获取session、get、cookie、server中的数据

    {$smarty.get.page} {* PHP方式:$_GET["page"] *} 
    
    {$smarty.post.page} {* PHP方式:$_POST["page"] *}
    
    {$smarty.cookies.username} {* PHP方式:$_COOKIE["username"] *} 
    
    {$smarty.session.id}  {* PHP方式:$_SESSION["id"] *}  
    
    {$smarty.server.SERVER_NAME}   {* PHP方式:$_SERVER["SERVER_NAME"] *} 
    
    {$smarty.env.PATH}   {* PHP方式:$_ENV["PATH"]*} 
    
    {$smarty.request.username}  {* PHP方式:$_REQUEST["username"] *}
    

      

    Smarty的流程控制

    1.foreach循环和if语句

    {foreach item=$value from=$array}
        {if $value==1}
            //....
        {elseif $value==2}
            //...
        {else}
            //...
        {/if}
    </foreach>                
    

      

    2.section循环

    {section}可以循环遍历连续数字索引的数组, 区别于{foreach} 可以循环任意关联数组. 每个{section}标签都必须有一个匹配的{/section}关闭标签。

    {section}不能用于循环关联数组,它仅能循环数字索引的、连续下标的 (0,1,2,...)数组。 要循环关联数组,请使用{foreach}。

    模板中设置变量:

    $people = array('tony','sweety','abc','four');
    $smarty->assign('people',$people);
    

      

    使用section读取:

    {section name=n loop=$people} //name表示循环变量,loop表示访问的数组
         name:{$people[n]}<br/>
    {/section}
    

      

    输出:

    name:tony
    name:sweety
    name:abc
    name:four
    

      



    本博客文章未经许可,禁止转载和商业用途!

    如有疑问,请联系: 2083967667@qq.com


  • 相关阅读:
    风险分解结构
    WBS 工作分解结构
    react函数式组件(非路由组件)实现路由跳转
    react使用antd组件递归实现左侧菜单导航树
    React4.0以上如何获取当前的路由地址呢
    浅谈react传入路由参数---withRouter组件
    react项目实现维持登录与自动登录
    async和await应用步骤分析+优化异常处理
    跨域场景&&跨域处理方案
    vscode react中标签自动补全 vscode jsx语法自动补全html标签
  • 原文地址:https://www.cnblogs.com/rask/p/9164850.html
Copyright © 2020-2023  润新知