PHP15 Smarty模板
学习目标
- Smarty基本概念
- Smarty安装和配置
- Smarty模板设计
- Smarty流程控制
Smarty基本概念
一种模板引擎,在系统中进行预处理和过滤数据。是主流的PHP模板引擎,此外PHP中常用的模板引擎还有SimpleTemplate等。
主要特点:
- 强大的逻辑处理能力。
- 模板编译能力。把模板编译成高效的PHP语言,编译后的模板为web程序提供高效率渲染请求。
- 可选择的缓存。可以设定某些常用模板存储在缓存中,为常用模板提供快速加载功能。
- 可设置和可扩展性。smarty基于面向对象开发,具备良好的扩展性。
- 长期的应用验证了其安全性。
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
PHP15 Smarty模板的更多相关文章
- Smarty模板引擎技术
Smarty模板引擎技术 什么是模板引擎? 什么是Smarty模板引擎? 为何选择Smarty模板引擎? 如何使用Smarty模板引擎? 一.历史背景 场景一:回顾之前编写PHP项目的方式 //链接数 ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
- 12月15日下午Smarty模板函数
1.{$var=...} 这是{assign}函数的简写版,你可以直接赋值给模版,也可以为数组元素赋值. <{$a = 10}><!--赋值语句--> <{$a}> ...
- 12月15日smarty模板基本语法
smarty基本语法: 1.注释:<{* this is a comment *}>,注意左右分隔符的写法,要和自己定义的一致. <{* I am a Smarty comment, ...
- SMARTY模板中如何使用get,post,request,cookies,session,server变量
{$smarty}保留变量不需要从PHP脚本中分配,是可以在模板中直接访问的数组类型变量,通常被用于访问一些特殊的模板变量.例如,直接在模板中访问页面请求变量.获取访问模板时的时间戳.直接访问PHP中 ...
- ThinkPHP3.2.3整合smarty模板(二)
前言:继ThinkPHP3.2.3整合smarty模板(一)之后,继续来探讨一下tp框架整合smarty模板,看到有人在群上问到怎么使用自定义的常量,今天就具体来谈谈: 一.开发一个项目,必不可少会用 ...
- smarty 模板几个例子
一.assign和display方法的使用以及几个变量调节器 header("content-type:text/html;charset=utf-8");//加载Smarty引擎 ...
- smarty模板引擎
1. 使用smarty 1.1 项目引入 // 3, 连接数据库,提取相关数据 $title = "Smarty模板引擎"; $content = "Smarty模 ...
- Smarty模板函数
1.{$var=...} 这是{assign}函数的简写版,你可以直接赋值给模版,也可以为数组元素赋值. <{$a = 10}><!--赋值语句--> <{$a}> ...
随机推荐
- 转载:SharePoint:扩展DVWP - 第1部分:布局增强 – 在默认值模板和编辑模板中重新排列栏
SharePoint:扩展DVWP - 第1部分:布局增强 – 在默认值模板和编辑模板中重新排列栏 当我们在数据视图中启用编辑,删除模式的链接时,SPD总是将链接添加到左边. 而我本来希望添加到右侧. ...
- Unity3D4.* NGUI制作动态字库
新建一个工程,这个工程必须没有中文路径,否则会不识别字体!!! 首先导入NGUI插件,这里我用的是NGUI 3.0.2版本的. 在Assets 下创建一个文件夹,用来存放接下来的工作文件 . 这里随便 ...
- Codechef SEPT17
Codechef SEPT17 比赛链接:https://www.codechef.com/SEPT17 CHEFSUM code给定数组 a[1..n] ,求最小的下标 i ,使得 prefixsu ...
- Spring之配置文件加载方式
spring在org.springframework.core.io包中提供了多种配置文件加载方式.无论是XML.URL还是文件,都有很好的支持.比如基于URL的UrlResource.基于输入流的I ...
- HDU 1270 小希的数表 (暴力枚举+数学)
题意:... 析:我们可以知道,a1+a2=b1,那么我们可以枚举a1,那么a2就有了,并且a1+a3=b2,所以a3就有了,我们再从把里面的剩下的数两两相加,并从b数组中去掉, 那么剩下的最小的就是 ...
- (4)ASP.NET Core 中间件
1.前言 整个HTTP Request请求跟HTTP Response返回结果之间的处理流程是一个请求管道(request pipeline).而中间件(middleware)则是一种装配到请求管道以 ...
- ASP.NET Core Web API + Angular 仿B站(一) 目的分析以及创建 WebAPI + Angular7 项目
前言: 本系列文章主要为对所学 Angular 框架的一次微小的实践,对 b站页面作简单的模仿. 本系列文章主要参考资料: 微软文档: https://docs.microsoft.com/zh-cn ...
- 51nod1174【基于线段树的RMQ】
很基础啊~ #include <bits/stdc++.h> using namespace std; typedef long long LL; const int INF=-0x3f3 ...
- poj1015【DP.......无奈了】
首先,读题,真是一窍不通.后来看完程序的意思,才明白吧.. 题意: n个人中选m个,条件是取sum|D-P|最小,当有|D-P|相同的时候取|D+P|最大的.然后输出那些m个人的sumD,sumP,最 ...
- SQL中进行转列的几种方式
SQL中进行转列 在很多笔试的程序员中会有很多写SQL的情况,其中很多时候会考察行转列.那么这个时候如果能写出来几种行转列的SQL,会给面试官留下比较好的印象. 以下是这次sql转换的表结构以及数据 ...