Smarty3学习第一天

简介:



Smarty3 第一天
By 飞鸿影~
1、什么是smarty?
Smarty是采用php写的一个模版引擎,设计的目的是要将php代码与html代码分离,
使php程序员只专注于php代码的编写,网页美工只专注于网页的美化

2、采用模版引擎后:
1)php代码与html代码分离开了,php代码放在一个单独的php文件中,html代码放在一个单独的html文件中
2)数据的传递首现php中的数据先给了模版引擎,然后模版引擎再把接收到的数据给模版文件显示。
3)模版文件中不再有php代码或者说php标记的出现,模版中显示的数据都是通过模版引擎的标记显示出来的
index.php -> smarty模版引擎 -> index.html

3、Smarty的优点:
1)速度快:相对于其它的模版引擎而言的
2)编译型:支持缓存技术,无需每次重新编译(在模版文件没有改动的情况下)
3)模版中可以使用流程控制语句。

4、Smarty模版引擎运作流程
①在php程序运行时,初始化smarty模版引擎
②smarty模版引擎读取模版文件(.html或tpl文件)
③在读取模版文件的时候,smarty模版引擎会自动判断该模版文件是否需要重新编译。
④如果不需要重新编译,则直接进行模版变量替换。
⑤如果是第一次执行此程序文件或者说模版被改动了,那么就需要重新编译后再进行模版变量替换。
⑥最终执行的是编译后的php文件。
⑦输出结果到浏览器。

5、如何获得Smarty:
到官方网站去下载smarty模版引擎压缩包
官网: http://www.smarty.net
解压后将libs目录拷贝至项目开发目录

6、搭建Smarty模板示例:
1)将libs库目录复制过来。
2)创建一个模板目录templates模板文件存放目录
创建一个configs配置文件目录
3)编写index.php文件(入口文件)做Smarty导入和创建;templates目录中新建index.html模板文件
++  index.php 
<?php
    require("libs/Smarty.class.php");    //导入Smarty类
    $smarty = new Smarty();    //创建对象
    $smarty->assign("name","zhangsan");    //向Smarty模板中分配变量name=zhangsan
    $smarty->display("index.html");    //使用index.html显示
?>

 

++ index.html 




<html>
    {$name}
</html>

[小提示]
assign():主要用来将php中的标量类型的数据赋值给模版变量
display():主要用来显示指定的模版文件,可以指定路径

[模板中如何显示分配的变量?]
一般的变量,使用  {$var} 形式.例如我们这里分配的name=zhangsan,
我们在模板index.html中使用  {$name} 显示.
后面会讲述更多关于模板变量显示的内容.

4)使用浏览器访问index.php,将会创建目录templates_c和cache目录

5)最后的结构:
根目录
 |--libs         //Smarty库
 |   |--Smarty.class.php
 |--templates     //模板目录
 |   |--index.html
 |--templates_c //模板编译目录
 |--cache        //模板静态缓存目录(注意需开启缓存)
 |--configs        //配置文件目录
 |--index.php   //php文件(入口)

6)其他可选配置项(不改即为默认值):
//配置
$smarty->debugging=false;    //是否开启debug调试
$smarty->template_dir="templates/";     //模板目录
$smarty->compile_dir="templates_c/";    //编译目录
$smarty->config_dir="configs/";     //配置项目录
$smarty->cache_dir="cache/";    //缓存目录
$smarty->caching=false;     //是否开启缓存
$smarty->cache_lifetime=3600;    //缓存生命周期,单位是s
$smarty->left_delimiter="{";    //左定界符
$smarty->right_delimiter="}";    //右定界符

7、Smarty应用之模版变量
通常分配的变量有:字符串、数字、数组、对象
[例]2.php:



$smarty->assign("title","Smarty模板引擎实例--变量输出");//字符串
$smarty->assign("num",100);//数字
$smarty->assign(array("name"=>"zhangsan","age"=>23));//多个值
$smarty->assign("a1",array(10,20,30));//索引数组
$smarty->assign("a2",array("name1"=>"zs","name2"=>"zs2"));//关联数组
$smarty->assign("ob",new Demo());//对象,含有公共属性name和age,为了节约篇幅,这里省略了类

模板里访问分配的变量(templates/2.html):

<h2>{$title}</h2>
<ul>
    <li><a href="index.php">返回首页</a></li>
    <li>^_^{*注释的内容不会被输出*}</li>
    <li>输出一个数值:{$num},{$num*2}</li>
    <li>输出一个字符串:{$title},长度:{strlen($title)}</li>
    <li>输出一个数组里面的批量值:{$name},{$age}</li>
    <li>输出一个索引数组a1:{$a1[0]},{$a1[1]},{$a1[2]}</li>
    <li>输出一个关联数组a2:{$a2['name1']},{$a2['name2']}</li>
    <li>输出一个关联数组a2:{$a2.name1},{$a2.name2}</li>
    <li>输出一个对象:{$ob->name},{$ob->age}</li>
</ul>

 

8、模板里php函数使用(一般是return有结果的函数才直接使用)
(templates/3.html):

当前时间{date("Y-m-d H:i:s")}
自定义函数:{fun()}

 

**其中自定义函数在3.php中是



function fun(){
    return "hehe";
}


9、模板里超全局变量使用(templates/4.html):




<li>session中的信息:{$smarty.session.name}</li>
<li>get中的信息:{$smarty.get.id}</li>
<li>post中的信息:{$smarty.post.name}</li>
<li>常量PI中的信息:{$smarty.const.PI}</li>

 

**当然,得提前在4.php中定义才行:


$_SESSION['name']="admin";
$_GET['id']=100;
$_POST['name']="yjc";
const PI=3.14;

更多还支持:
诸如   $_GET, $_POST,$_COOKIE, $_SERVER, $_ENV and $_SESSION   都可以使用  {$smarty.post.get} 类似
方法输出,记得改为小写

10、模板从configs/目录读取配置文件
模板里读取格式:  {config_load file="lang.conf" section="en"} 
其中section为可选项,配置文件后缀一般是conf,ini等

举例说明配置文件格式(configs/user.conf)
[users]
username=zhangsan
age=22

模板里使用配置文件定义的变量方法是:
{$smarty.config.username}或者{#username#}
{$smarty.config.age}或者{#age#}


11、模板里包含文件
例如包含当前目录下menu.html
{include file="menu.html"}


12、模板里foreach遍历数组
Smarty3.0新版使用格式(与php原生的基本一样):
{foreach $data as $key=>$value}
    {$value.name}
    {$value.age}
{/foreach}

 

Smarty3.0同时兼容旧版使用方法:

{foreach from=$data key="key" item="value"}

{/foreach}

 

[今天写在后面的话]
当然,我们可以连接数据库后,使用之前写的Model.class.php数据库操作类写一个学生信息管理系统.
通过使用switch,可以实现单个页面display多个页面,很类似ThnkPHP控制器的雏形.
大概思路:

switch($_GET['a']){
    case "add"://添加信息表单
        $smarty->display("stu/add.html");
        break;
    case "insert"://执行添加信息
        break;
    case "edit"://修改信息表单
        $smarty->display("stu/edit.html");
        break;
    case "update"://执行更新信息
        break;
    case "del"://删除信息
        break;
    case "index":
    default://浏览信息
        $s->smarty("stu/index.html");
}


目录
相关文章
|
1月前
|
JavaScript
js获取时间昨天,今天和明天
js获取时间昨天,今天和明天
12 0
|
7月前
|
JavaScript
js 日期 获取今天、昨天、明天
js 日期 获取今天、昨天、明天
|
5月前
|
JavaScript
vue 获取上一周和获取下一周的日期时间
vue 获取上一周和获取下一周的日期时间
41 0
|
7月前
|
JavaScript
js根据日期计算星期几效果demo(整理)
js根据日期计算星期几效果demo(整理)
|
9月前
|
域名解析 移动开发 前端开发
零基础10天学会网页制作第一天
什么是网页制作,顾名思义,就是在互联网上开发网页,对于互联网中网页,我们肯定司空见惯,你所浏览的任何网站,比如,百度,头条,淘宝,京东,大学网站,公司官网等等,都是网页,也就是说,你在Pc端或移动端中的浏览器,或者APP嵌套的H5,所看到的,都是一个网页,与我们的生活息息相关。
|
10月前
|
JavaScript 容器
学习JS第一天
学习JS第一天
35 0
|
11月前
|
C++ Python
刷题笔记|计算两个年份间某一日期是周末的天数,发现ctime库对象有时间范围(C++|Python )
刷题笔记|计算两个年份间某一日期是周末的天数,发现ctime库对象有时间范围(C++|Python )
222 0
|
JavaScript
js第一周复习
js第一周复习
js第一周复习
|
数据采集 C++ Python
爬虫基础--第一天
本次系列主要记录我学爬虫的一些精髓之处,值得一看。
91 0
|
Unix PHP
PHP日期时间运用十二:获取当前月份及其前三个月
今天继续给大家介绍PHP日期运用系列内容,非常适合新人学习~那么在上一篇《PHP日期时间运用十一:三种方法比较两个指定的日期》文章中给大家介绍了怎么使用3种方法比较两个日期,有需要的朋友可以学习学习~ →相关推荐:《PHP日期时间运用大汇总(持续更新~)》 本文的主题内容则是教大家如何编写一个PHP脚本来获取当前月份和前三个月。 具体什么意思呢?比如说当前日期是5月,获取前3个月就是2、3、4月份。 下面我们就直接上PHP代码:
686 0