第一步:
下载Smarty库
http://www.smarty.net/download
https://github.com/smarty-php/smarty/releases
第二步:
解压下载下来的压缩包,然后找到libs文件夹,这个文件夹是smarty核心文件,我们项目里面只需要将这个libs文件夹copy放入即可;
第三步:
新建项目,将第二步里面的libs文件夹引入到项目里面,建议将libs文件夹名字改成smarty
在新项目里面新建文件夹:cache、configs、templates、templates_c
cache:缓存文件存放目录
configs:配置文件存放目录
templates:模板文件存放目录
templates_c:编译文件存放目录
第四步:
新建一个demo.php demo.tpl 使用一把看下,打开demo.php是否能够将demo.php里面赋值的变量注入到模板demo.tpl文件里面进行显示,看下编译文件夹下面是否有编译后的文件
demo.php文件在根目录下面新建
demo.tpl文件在templates文件夹下面新建
demo.php文件
define('ROOT_PATH', dirname(__FILE__));
//引入Smarty
require ROOT_PATH.'/smarty/Smarty.class.php';
//实例化smarty
$smarty=new Smarty();
//根目录
$smarty->template_dir=ROOT_PATH.'/templates/';
//编译目录
$smarty->compile_dir=ROOT_PATH.'/templates_c/';
//配置文件目录
$smarty->config_dir=ROOT_PATH.'/configs/';
//是否开启缓存
$smarty->caching=ture;
//缓存目录
$smarty->cache_dir=ROOT_PATH.'/cache/';
//定界符
$smarty->left_delimiter='{';
$smarty->right_delimiter='}';
//php文件里面赋值
$smarty->assign('show','Curtis');
//将赋值变量show在模板demo.tpl文件里面进行显示
$smarty->display('demo.tpl');
demo.tpl文件
{$show}
第五步:
了解smarty变量赋值(查看实际例子)
变量:普通变量、数组(索引数组、关联数组、二维数组)、对象
smarty内置变量
第六步:
函数
-
smarty
2019-09-18 13:14:00第一步: 下载Smarty库 http://www.smarty.net/download https://github.com/smarty-php/smarty/releases 第二步: 解压下载下来的压缩包,然后找到libs文件夹,这个文件夹是smarty核心文件,我们项目...转载于:https://my.oschina.net/u/2504633/blog/524657
-
Smarty
2018-12-06 21:55:181.Smarty的特点 Smarty是PHP的一个引擎模板,可以更好的进行逻辑与显示的分离,即MVC,这个引擎的作用就是将C分离出来。 2.下载smarty-3.1.30。引入Smarty.class.php include './smarty-3.1.30/libs/Smarty....1.Smarty的特点
Smarty是PHP的一个引擎模板,可以更好的进行逻辑与显示的分离,即MVC,这个引擎的作用就是将C分离出来。
2.下载smarty-3.1.30。引入Smarty.class.php
include './smarty-3.1.30/libs/Smarty.class.php';
3.引入文件include include_once require require_once之间的区别
1)include 与require
若引入的文件不存在,include会往下执行,报一个warning ;require不会继续往下执行,报error。
2)include 与include_once
once 会自动判断文件是否已经引入,如果引入了,就不再重复执行。include每次都会引入。once保证文件之引入一次。require与require_once同理。
3)文件不允许被包含多次,用once。文件设计上规范,不会出现多次包含的错误就用include。因为include_once会判断插入几次,所以用include效率更高。
4.Smarty的几个知识点
Smarty需要实例化对象
$smarty = new Smarty();
要指定模板文件的路径,指定模板编译后的文件的所在路径
//定义smarty所使用的文件目录 define('SMARTY_ROOT','./'); //指定模板文件所在路径 template template_c会自动创建也可事先建好 $smarty->template_dir = SMARTY_ROOT . '/template'; //指定模板编译后的文件所在路径 $smarty->compile_dir = SMARTY_ROOT . '/template_c';
用assign向模板传递能能量
用display指定模板的文件显示
$smarty->assign('name','张三'); //指定模板文件显示 使用display指定index.tpl来显示 $smarty->display('index.tpl'); //在template文件夹下 也可写成.html
5.Smarty中的foreach
可以连接数据库,
$smarty->assign('title','个人信息'); $smarty->assign('data',$data);
其中,title可以到index.tpl中显示,data插入数据。
<title>{$title}</title>
{foreach $data as $row} <tr> <td>{$row.id}</td> <td>{$row.no}</td> <td>{$row.name}</td> <!-- <td>{$row.sex}</td> --> <!-- <td>{$row.age}</td> --> </tr> {/foreach}
利用Smarty可以是代码简单,在html中可以不用再写php的分界符了也不用再写echo了,用{ }就可以。
-
smarty
2016-08-28 11:43:18Smarty模板(转) 2008年10月17日 星期五 10:08 使用模板化主要有两个原因:1、可以使用同样的代码基为不同的目标生成数据。2、应用程序设计人员(负责创建和维护界面的人)可以与应用程序 开发人员独立...查看文章
Smarty模板(转)
2008年10月17日 星期五 10:08
使用模板化主要有两个原因:1、可以使用同样的代码基为不同的目标生成数据。2、应用程序设计人员(负责创建和维护界面的人)可以与应用程序 开发人员独立工作,因为用表现和逻辑并非密不可分地纠缠在一起。但模板化引擎如何完成这种分离?有趣的是,大多数实现的做法与编程语言非常相似,为完成各 种与界面有关的任务提供了良好的定义的语法和命令集。
Smarty提供了很多强大的功能。
1、强大的表现逻辑
2、模板编译
3、缓存
4、高度可配置和可扩展
5、安全
如何使用Smarty?
使用Smarty与使用其它任何类库一样。对于初学者,只需要在执行脚本中使Smarty类库可用。实现这一点非常容易,使用 require() 语句即可:
- require("Smarty.class.php");
之后,就可以实例化Smarty类:
- $smarty = new Smarty;
现在,就可以用Smarty来做东西了。下面看看一个小例子:
以下是模板文件 index.tpl :
- <html>
- <head>
- <title>{$title}</title>
- </head>
- <body bgcolor=”#ffffff” text=”#000000″ link=”#0000ff” vlink=”#800080″ alink=”#ff0000″>
- <p>
- Hi,{$name}.Welcome to the wonderful world of Smarty.
- </p>
- </body>
- </html>
以下是PHP页面方面代码 index.php:
- <?php
- require(’Smarty.class.php’);
- $smarty = new Smarty;
- $smarty->assign(”name”,”JiangZone”);
- $smarty->assign(”title”,”Jiang’s Blog”);
- $smarty->display(”index.tpl”);
- ?>
从以上两段代码可以看得到,index.tpl文件是页面文件,没有业务逻辑代码,只有{$name},{$title},初学者可能觉得怪,不过 如果有 Java基础的话,应该看得出,它跟Jsp的EL表达式有点类似,或者跟标签库功能有点像。这样看上去,页面跟程序逻辑就分开来了,设计师专注于他的页面 设计,需要放入处理后的值的话,就加上个{$name}等标记,而程序员则专注于程序逻辑的实现,将处理结果放到模板页面那里相应的变量位置。明眼人可能 很快看得出,上面PHP代码里,
- $smarty->assign("name","JiangZone");
就是一个对模板赋值的过程,意为为模板 中的变量$name 的值设为字符串“JiangZone”,下面的也是一样,而最后那句,
- $smarty->display(”index.tpl”)
则是将上面设 置好的值应用到index.tpl模板上,并将应用后的结果输出到客户端。
Smarty 的表现逻辑
前面只简单的讲述了Smarty里的基本原理,也就传几个变量的值而已,而本节中,将会讲述Smarty的逻辑表示结构,比如它的分支,修饰符,迭代等结构的表达。
(1) 注释:
中Smarty中,也可以使用注释,设计人员可以用注释在模板页面中传递一些说明信息等。在Smarty中的注释为:{* Hello Jiang! *},大家可以看到,Smarty中的注释是用{**}来包围的,可以单行,也可以多行,比如可以这样写:
{* Hello
Jiang! *}
(2)变量修饰符:
在Smarty中,可以为变量添加修饰符,用于对变量进行一些Smarty已定义好的操作,变量修饰符的写法是:
{$var|modifier}
其中,$var 是变量,modifier 是修饰符的单词,意为对指定变量进行某种修饰操作。
1、capitalize 修饰符
capitalize 修饰符用于对变量内的值中所有单词的首字母变为大写,可看示例:
- $smarty = new Smarty;
- $smarty->assign("$title","hello jiang zone");
- $smarty->display("index.tpl");
index.tpl 内容为:
{$title|capitalize}
2、count_words
count_words 函数统计变量中的单词总数
3、date_format
date_format 函数是PHP strftime() 函数的包装器,它能将可以被strftime()解析的任何日期/时间格式字符串转换为某种特殊格式。
4、default
default 函数当应用层没有返回值时,default为指示特定变量的默认值提供了一种简单的方式。
5、strip_tags
strip_tags 函数删除变量字符串中的标签符号。如:
- $smarty->assign(”name”,”<b>Jiang</b>”);
模板里这样写:{$name|strip_tags}
会输入如下name的值:”Jiang”,它将<b></b>删除了。所以,没有输出粗体
6、truncate
truncate 函数将变量字符串截取为指定数量的字符。]
(3)控制结构
1、if-elseif-else
Smarty 的if语句与PHP语言中的if语句相同,与PHP一样,可以使用一些条件限定符如下:
eq gt gte ge
lt lte le ne
neq is even is not even is odd
is not odd div by event by not
mod odd by == !=
> < <= >=
示例:
{if $var > 5}
<p>Hello JiangZone</p>
{/if}
2、foreach
foreach 标记的作用与PHP语句中的命令相同。但如下所示,其语法大不相同。它有4个参数,其中两个是必要的:
form : 这个必要参数指定目标数组的名。
item : 这个必要参数指定当前元素的名。
key : 这个可选参数指定当前键的名。
name : 这个可选参数指定节的名。这个名是任意的,应当设置为一个描述性的名字。
看看如下例子:
- require("Smarty.class.php");
- $smarty = new Smarty;
- $daysofweek = array("Mon","Tues","Weds","Thu","Fri","Sat","Sun");
- $smarty->assign("daysofweek",$daysofweek);
- $smarty->display("daysofweek.tpl");
以下是daysofweek.tpl模板文件:
{foreach from=$daysofweek item=$day}
{$day}<br />
{/foreach}
3、foreachelse
foreachelse 标记与 foreach 一起使用,与用于字符串的 default 标记作用类似,数组为空时 foreachelse 标记可以生成某个候选结果。以下是一个使用 foreachelse 的模板示例:
{foreach key=key item=item from=$titles}
{$key}: {$item}<br />
{foreachelse}
<p>No states matching your query were found.</p>
{/foreach}
注意,foreachelse 不使用结束括号:它嵌入到foreach中,这与elseif嵌入到if语句中很类似。
(4)语句
Smarty 提供了几个用于完成特殊任务的语句。
1、include
include语句与PHP包中的同名语句相同,只是它只用于将其它模板导入到当前模板。例如,假设希望在Smarty模板中导入两个文件,header.tpl 和 footer.tpl ,可以如下完成:
{include file=”header.tpl”}
{include file=”footer.tpl”}
2、insert
insert 标记与 include 标记的功能相同,只是它要导入不会被缓存的数据。例如,可以使用这个函数插入经常更新的数据,如股票价格,天气预报或其它在很短时间内就要改变的内容。它也接受几个参数,一个是必要的,另外三个是可选的:
name : 这个必要参数确定insert函数的名。
assign : 这个可选参数可用于将输出给变量,而不是直接发送到输出。
script : 这个可选参数可以指向在导入文件前直接执行的一个PHP脚本。当输出文件的内容依赖于脚本所完成的某个特定动作时,可以使用此参数。例如,可以执行一个PHP脚本,返回某个默认的股票价格放在不可缓存的输出中。
var : 这个可选参数用于传入所有插入模板使用的其它参数。可以通过这种方式传递很多参数。
3、literal
literal 标记告诉Smarty :标记中嵌入的任何数据都应当原样输出,不需要转换。这个标记量常用于在模板中嵌入JavaScript 和CSS ,从而不需要担心与 Smarty 的定界符冲突。
4、php
可以使用php函数在模板中嵌入PHP代码。{php}{/php}标记中的任何代码都由PHP引擎处理。
Smarty 的配置文件
开发人员一直使用配置文件来存储确定应用程序行为和操作的数据。例如,php.ini 文件负责确定PHP的大量行为。对于Smarty ,模板设计人员也可以利用配置文件的强大作用。例如,设计人员可以使用配置文件存储页面标题、用户消息以及有必要集中存储的任何信息。
以下是一个示例配置文件 (名为 app.config):
#Global Variables
appName = “PMNP News Service”
copyright = “Copyright 2005 PMNP News Service, Inc.”
[Aggregation]
title = “Recent News”
warning = “Copyright warning.Use of this information is for personal use only.”
[Detail]
title = “A Closer Look…”
中括号中包围的项称为节(section)。节之外的项都认为是全局的。这此项应当在定义任何节之前定义。
下面将展示如何使用config_load 函数来加载配置文件,还会解释如何在模板中引用配置变量。
配置文件存储在 configs 目录中,并使用Smarty函数 config_load 加载。下面是加载配置文件 app.config 的示例:
{config_load file=”app.config”}
但是要记住,此调用只能加载配置文件的全局变量。如果要加载特定的节,需要使用 section 属性指定。所以,可以使用以下语法加载 app.config 的节 Aggregation:
{config_load file=”app.config” section=”Aggregation”}
另外两个可选参数介绍如下:
scope: 确定所加载的配置变量的作用域。默认情况下设置为local,表示变量只能用于本地模板。其它可能的设置包括 parent 和 global 。作用域设置为 parent 时,变量可用于本地模板和调用模板。作用域设为global 时,变量则可以用于所有模板。
section:指定加载配置文件的特定节。因此,如果只对某个特定节感兴趣,可以只加载该节,而非整个文件。
引用配置变量
配置文件中变量的引用方式与其它变量的引用方式有所不同。实际上,这些配置变量使用几种不同的语法来引用,下面将介绍这个内容。
1、#
在 Smarty 模板中,可以在变量前面加上#号来引用配置变量。例如:
{#title}
2、Smarty的$smarty.config变量
引用配置变量时,如果喜欢更为正式的语法,可以使用 Smarty 的 $smarty.config 变量。例如:
{$smarty.config.title}
3、get_config_vars() 方法
array get_config_vars([string variablename])
get_config_vars() 方法返回一个数组,包含加载的所有配置变量值。如果只对某个变量值感兴趣,可以通过 variablename 传入该变量。例如,如果只对以上 app.config 配置文件中 Aggregation 节的 title 感兴趣,可以首先使用 config_load 函数加载该节:
{config_load file=”app.config” section=”Aggregation”}
然后,在模板中启用PHP的节中调用 get_config_vars( ),如下:
$title = smarty->get_config_vars(”title”);
当然,无论选择哪一种获取配置参数的语法,都不要忘记首先使用 config_load 函数加载配置文件。
Smarty 的缓存
功能强大的应用程序一般都有很大的开销,通常是数据获取和处理操作带来的。对于Web应用程序,这个问题是由于HTTP协议的无状态性造成的。 由于HTTP协议是无状态的,对于每个页面请求,都要重复地执行相同的操作,而不论数据是否修改。要让应用程序在世界范围最大的网络中可用,会使这个问题 进一步恶化。所以,毫不奇怪,人们总在想方设法地让Web应用程序运行得更高效。对此有一种特别有效的解决方案,这也是最合理的方案之一:将动态页面转换 成静态页面,只有在页面内容有修改之后才重新构建,或者定期地重新构建。Smarty提供了这样一个特性,一般称为页面缓存。
如果要使用缓存,需要首先通过设置Smarty 的缓存属性来启用缓存,如下:
- <?php
- require(”Smarty.class.php”);
- $smarty = new Smarty;
- $smarty->caching = 1;
- $smarty->display(”news.tpl”);
- ?>
启用缓存后,调用 display() 和 fetch() 方法在指定模板 (由$cache_dir 属性指定) 中保存目标模板的内容。
处理缓存生命期
缓存的页面在由 $cache_lifetime 属性指定的生命期(以秒为单位)内有效,默认为3600秒,即1小时。因此,如果希望修改此设置,就可以设置这个属性,如下:
- <?php
- require(”Smarty.class.php”);
- $smarty = new Smarty;
- $smarty->caching = 1;
- //设置生命周期
- $smarty->cache_lifetime = 1800;
- $smarty->display(”news.tpl”);
- ?>
在此对象的生命期内,后续调用和缓存的模板都使用此生命期。
有可能需要覆盖以前设置的缓存生命期,从而能分别控制每个模板的缓存生命期。通过将$caching 属性设置为2就可以做到这一点,如下:
- <?php
- require(”Smarty.class.php”);
- $smarty = new Smarty;
- $smarty->caching = 2;
- $smarty->cache_lifetime = 1200;
- $smarty->display(”news.tpl”);
- ?>
在这里,news.tpl 模板的生命期设置为20分钟,它覆盖了前面设置的全局生命期值。
通过 is_cached( ) 消除处理开销
如前面所述,缓存模板还能消除处理开销,如果禁用缓存(只启用编译),这些处理开销总是会发生。但是,默认情况下并没有启用缓存。要启用缓存,需要把处理指令放在 if 条件中,并执行 is_cached( )方法,如下:
- <?php
- require(”Smarty.class.php”);
- $smarty = new Smarty;
- $smarty->caching = 1;
- if (! $smarty->is_cached(”news.tpl”)){
- $conn = mysql_connect(”localhost”,”name”,”pwd”);
- $db = mysql_select_db(”news”);
- $query = “select * from news”;
- ……
- }
- $smarty->display(”news.tpl”);
- ?>
在这个例子中,将首先验证模板news.tpl是否有效。如果有效,则跳过数据库访问,否则才访问数据库。
为每个模板创建多个缓存
任何指定的Smarty模板都可以用于为整个新闻项,博客项等提供一个通用界面。由于同一个模板用来生成不同数量的不同项,那么如何缓存一个模板的 多个实 例呢?答案比你想像的要简单。Smarty的开发人员实际不已经解决了这个问题,可以通过display()方法为缓存模板的每个实例指派一个唯一标识 符。例如,假设有一个用生成用户信息的模板,并希望缓存这个模板的各个实例:
- <?php
- require(”Smarty.class.php”);
- require(”User.class.php”);
- $smarty = new Smarty;
- $smarty->caching = 1;
- //根据不同的用户ID来区分不同的用户实例来判断有没有被缓存
- if(! is_cached(”userinfo.tpl”,$_GET[’userid’])){
- $user = new User();
- $smarty->assign(”name”,$user->getName());
- $smarty->assign(”address”,$user->getAddress());
- }
- /*
- 当显示时也根据该用户的ID来区分将哪个实例进行缓存,而不影响其它用户的缓存
- 即是用userid 值来区分同一个缓存模板的不同实例,所有用户都共用一个模板,
- 但信息都不尽相同,所以不能统一缓存,要独立分开缓存
- */
- $smarty->display(”userinfo.tpl”,$_GET[’userid’]);
- ?>
特别注意下面一行:
- $smarty->display(”userinfo.tpl”,$_GET[’userid’]);
这一行对于此脚本有两个功能,一方面获取名为$_GET['userinfo'] 的 userinfo.tpl 缓存版本,另一方面,如果还不存在这个缓存,则用这个名字来缓存该模板实例。采用这种方式,可以轻松地为指定模板缓存任意数量的实例。
关于缓存的结语
模板缓存大大提升了应用程序的性能,如果决定将Smarty集成到工程中来,就应当认真地考虑缓存。但是,因为大多数强大的Web应用程序功能都体现在其 动态性上,所以一方面要考虑到性能提升,另一方面也要考虑到缓存页面随时间是否仍有效,要在这二者之间进行权衡。
-
【数据分析实战训练营】Hive详解
-
Metabase从入门到精通视频教程
-
ConcurrentHashMap底层原理
-
2020-10-15-web新手区.md
-
转行做IT-第2章 HTML入门及高级应用
-
大学 毕业设计 项目实训 JAVA开发采用Struts2+Spring+Hibernate框架的三层MVC图书管理系统 源代码.zip
-
第1章 Java入门基础及环境搭建【java编程进阶】
-
python爬虫框架——scrapy(2) 实战练习
-
易语言http下载示例.rar
-
TreeView操作.txt
-
php随机生成0.1到10的随机数
-
在线视频学习网站的设计与实现.
-
C++异步串口通信
-
PHP支付宝微信支付配置教程
-
SubstancePainter插件开发-基础入门
-
Excel高级图表技巧
-
UR5_2021_01_24.rar
-
VisualSFM_windows_64bit
-
转行做IT-第7章 数组
-
【ZJU-Machine Learning】SVM的应用