$tpl=new Smarty();//新建一个smarty对象,我使用的是Smarty-3.1.6版本

1.设置smarty模板路径$tpl->setTemplateDir();默认情况下是templates

2.设置smarty模板编译路径$tpl->setCompileDir();默认情况下是templates_c

3.设置smarty模板引擎的左右 分隔符,

$tpl->left_delimiter="<{";

       $tpl->right_delimiter="}>";

默认情况下:public $left_delimiter = "{";//smarty源代码

public $right_delimiter = "}";//smarty源代码

为什么我们要改这些分隔符?

  因为比如在较早版本smarty引擎模板中,会报错,不能自动识别。

比如:
<style>
     div{margin:0;}
 </style>
 
 或者 javascript中
<script>
   function show(){
              alert("smarty");
 
               }
 </script>

这两种情况下,都有“左右大括号”,smarty引擎碰到会报错

4.初始化操作我们可以在外部另外创建一个初始化操作的php文件,如:smarty.ini.php。然后在php文件中包括进来即可

       <?php

              include "../Smarty3.1.6/libs/Smarty.class.php";

              $tpl=new Smarty();

              $tpl->setTemplateDir("./Tpl");

              $tpl->setTemplateDir("./Compile");     

              $tpl->left_delimiter="<{";

              $tpl->right_delimiter="}>";

       ?>

5.使用smarty模板引擎的display函数或者include其他模板时,都得以smarty对象中指定的模板目录(比如:Tpl目录,默认是templates目录)为基目录

  ①模板目录是:Tpl,该目录下存放着很多模板,有default,green,red模板,default模板目录下有很多模板文件(index.tpl、header.tpl、footer.tpl),此时display的正确用法:$tpl->display(“default/index.tpl”);即基目录下的default模板目录

  ②在模板文件(如:index.tpl)中包含其他模板文件时(如:header.tpl、footer.tpl),include的正确写法应该是:<{include “default/header.tpl”}> 、<{include “default/footer.tpl”}>

  虽然index.tpl、header.tpl、footer.tpl都在同一个目录下,但是<{include “header.tpl”}> 、<{include “footer.tpl”}>是错误的写法,这种情况,smarty引擎会到Tpl目录下找header和footer,而不是在default下面查找

6.如果要想让各个目录下的PHP程序都可以加载Smarty和使用Smarty指定的模板目录和编译目录,唯一的办法是使用绝对路径

7.Smarty模板引擎中访问变量的方式(模板中的变量前记得加”$”符号)

①访问数组

  • 索引数组:

   $tpl->assign("arr",array("aa","bb","cc"));

    $tpl->assign("arr2",array(array("二维数组一一","二维数组一二"),array("二维数组二一","二维数组二二")));

     访问索引数组:<{ $arr[0] }>、<{ $arr[0] }>、<{ $arr[0] }>

   访问二维索引数组:<{ $arr2[0][0] }>、<{ $arr2[0][1] }>

  • 关联数组:(使用 . 符号来访问)

        访问关联数组:<{$arr3.id}>、<{$arr3.name}>、<{$arr3.age}>

②访问对象

  • 创建对象:   
class human{

              private $sex;

              private $name;

              private $age;

              public function __construct($s,$n,$a){

                     $this->sex=$s;

                     $this->name=$n;

                     $this->age=$a;

                     }

              public function print_info(){

                     return $this->sex."--".$this->name."--".$this->age;

                     }

              }

       $tpl->assign("student",new human("male","MarcoFly",22));

      给模板中的对象赋值:<{$student->print_info()}>

8.Smarty模板引擎中的数学运算可以应用到模板变量中

  • 给变量赋值

    $tpl->assign("num1",10);

    $tpl->assign("num2",5.5);

  • 模板变量输出

    <{$num1}> //结果10

    <{$num2}> //结果5.5

    <{$num1+$num2}> //结果15.5

    <{$num1+$num2*$num2/$num1}>//结果13.025

9.在模板文件中使用图片、css文件、js文件时,路径要以访问的php文件(如;index.php)路径为主,因为我们访问的是php文件,而模板文件 (如:index.tpl)是被包含在php文件中的

smarty访问数组中的数据,如果是关联数组直接用点.的更多相关文章

  1. thymeleaf的内联th:inline(在javascript访问model中的数据)

    thymeleaf模板引擎为前端数据的获取提供了较大的便利,在html标签内可通过th标签加${}表达式访问model里的对象数据.但如果不想通过th标签而是简单地访问model对象数据,或是想在ja ...

  2. [Asp.net MVC]Asp.net MVC5系列——从控制器访问模型中的数据

    目录 概述 从控制器访问模型中的数据 强类型模型与@model关键字 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net M ...

  3. 关于iOS去除数组中重复数据的几种方法

    关于iOS去除数组中重复数据的几种方法   在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢? 第一种:利用NSDictionary的AllKeys(AllValues)方 ...

  4. php去除数组中重复数据

    <?php /** * 去除数组中重复数据 * by www.jbxue.com **/ $input = array("a" => "green" ...

  5. php获取数组中重复数据的两种方法

    分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...

  6. C语言一维数组中的数据随机排列

    #include <stdio.h>#include <stdlib.h> void randomlize(int *a, int n){        int i = 0,j ...

  7. ASP.NET MVC3快速入门——第五节、从控制器访问模型中的数据

    5.1 从控制器访问模型中的数据在本节中,我们将创建一个新的MoviesController类,并且书写代码来获取数据库中的数据,并通过视图模板来显示在浏览器中.鼠标右击Controller文件夹,点 ...

  8. js怎样得出数组中某个数据最大连续出现的次数

     1:js怎样得出数组中某个数据最大连续出现的次数 var test=[1,2,3,3,2,2,2,3,3,3,3,5,3,3,3,3,3] ;    var j  = 0 ;    var max  ...

  9. PHP如何将多维数组中的数据批量插入数据库?

    PHP将多维数组中的数据批量插入到数据库中,顾名思义,需要用循环来插入. 1.循环insert into 语句,逐渐查询 <?php /* www.qSyz.net */ @mysql_conn ...

  10. MongoDB实现数组中重复数据删除

    这个功能真的是写死我了,对于MongoDB一点都不熟悉,本来想使用spring与MongoDB的融合mongoDBTemplate,发现压根不是web项目,懒得配置那些配置文件,就使用最原始的数据库操 ...

随机推荐

  1. MAPPING SEGMENTS TO PAGES

    The segmentation and paging mechanisms provide in the support a wide variety of approaches to memory ...

  2. 7 款免费的 Metro UI 模板

    #1 – Free Metro Ui Style template by Asif Aleem 很棒的蓝色调 Metro UI 管理模板 #2: Metro-Bootstrap by TalksLab ...

  3. javascript必知必会:面象对象编程

    面象对象编程技术的核心理念:封装.继承.多态:在一些主流的高级编程语言中,比如:C#,VB.NET,JAVA,PHP等都是很容易实现的,而如果要在javascript中实现面象对象编程,可就不那么直接 ...

  4. 7z命令行参数中的路径

    最近在自动化的过程中用到了7z命令行工具,发现其参数中的路径挺有意思的,在此总结一下.本文中所有demo使用的7z版本为:15.14 x64. 压缩某个文件夹 下面的命令会把g:\temp\目录和目录 ...

  5. Emit学习(2) - IL - 对象的创建过程

    上一篇的介绍中, 并没有介绍到对象的创建过程, 这一篇主要就介绍一下, 对象的创建过程. 其实熟悉了IL语法之后, 完全可以用Reflector反编译代码去查看. 而且正因为有这个工具, 可以对照着R ...

  6. LINQ的Union方法

    2个集合合并,有相同的只取中其一个: source code: , , }; , , }; var result = a.Union(b); result.ForEach(delegate (int ...

  7. Socket开发框架之框架设计及分析

    虽然在APP应用.Web应用.Winform应用等大趋势下,越来越多的企业趋向于这些应用系统开发,但是Socket的应用在某些场合是很必要的,如一些停车场终端设备的接入,农业或者水利.压力监测方面的设 ...

  8. 基础复习 关于JS

    1,js是一门解释型语言,无需编译,编写js要知道当前对象有什么成员,未必所有成员都能点出来. 2,js大小写敏感,严格区分大小写. 3,弱类型语言,声明用var,字符串推荐使用单引号. 4,==要先 ...

  9. C# 文件 文件夹

    //判断文件夹(路径)是否存在 if (Directory.Exists(Path)) { } //获取文件大小 FileInfo file = new FileInfo(labOfPath); si ...

  10. C# 使用memcache(memcache安装)

    1.下载memcache. 2.安装memcache. 3.安装好后,打开任务管理器就能看到memcache服务了. 4 .memcache基本命令.