您的位置:首页 > 其它

smarty详解一:简介、安装、快速入门、变量的简单使用

2012-12-05 12:10 681 查看
Smarty笔记
1.为什么要用模板:
虽然MVC思想能够把模式、视图、控制器分离,以便利开发。但MVC并非是100%的分离,特别是V(视图)与C(控制器)无法获得完全的分离。例如,我们在视图文件中经常看到:
<html>
<head>
<meta http-equiv=”content-type” content=”text/html;charset=utf-8”>
</head>
<body>
<?php
//这里是信息处理代码
?>
</body>
</html>
这样的代码,既不适合分离开发,也不适合后期维护。因此,我们想,如果我们能将html与php代码分离就非常好了。所以,我们需要使用模板。
2.常用的模板有哪些:
市面上给我们提供了许多模板,公司自己写的,开源的,各种各样。php推荐的是smarty。
3.smarty如何安装:
我们讲解的是smarty2.x版本。你可以从网络上下载得到。下载完毕后,我们先将smarty的压缩文件解压,提取出其中的libs文件夹放置你的项目文件根目录。
如图:



这样,我们就已经完成了smarty模板。
4.smarty快速入门:
我们先键入一个简单的smarty模板的使用,之后再进行解释:
Index.php:
<?php
require_once "./libs/Smarty.class.php";
$smarty=new Smarty();
$smarty->left_delimiter="<{";
$smarty->right_delimiter="}>";
$smarty->assign("a","hello world!");
$smarty->display(index.html);
?>
Index.html文件:
<h1> <{$a}> </h1>
我们运行后会发现错误如下:



其原因在于smarty模板无法找到index.html文件夹。因此我们还需要在项目根目录创建一个smarty模板的默认模板目录templates,然后将index.html文件放置于内:



现在,我们在运行,又会报出如图错误:



此错误说明,我们还缺少一个smarty模板的编译文件夹templates_c,因此我们需要在项目根目录创建一个template_c的文件夹,如图:



现在,我们再次运行程序,可以看到,程序已经正确的运行了。结果如下:



现在,我们再回头看一看我们所写的两个文件的代码,首先是:index.php,
<?php
require_once "./libs/Smarty.class.php";
$smarty=new Smarty();
$smarty->left_delimiter="<{";
$smarty->right_delimiter="}>";
$smarty->assign("a","hello world!");
$smarty->display(index.html);
?>
首先,我们先引入libs文件夹中的smarty.class.php,这是smarty的核心类,也是我们讲解的重点。其次的new smarty()语句让我们创建了一个smarty对象。再次,smarty对象中的left_delimiter与right_delimiter属性决定了我们在index.html文件中变量的识别符,例如:<h1> <{$a}> </h1>“<{ ”和 “}>”让smarty模板能够识别里面的变量。Smarty中的assign()方法的意思是将index.html中的变量a赋值为hello world字符串。最后的smarty中的display()方法将指定我们需要显示哪一个smarty模板,我们是需要显示index.html文件。
怎么样,通过以上小小的例子,是否感到smarty让V-C分离十分彻底?那么他的原理是什么呢?
5.smarty原理简单解释:
现在我们打开templates_c,会发现一个文件大似是“%%77^774^774BE9%index.html.php”。现在我们打开它。我们惊异的发现,原本<{$a}>的地方被php代码代替,类似于“<?php echo $this->_tpl_vars['a']; ?>”。因此,smarty的原理大致就是将模板文件<{…}>的部分用php代码替换然后进行输出。
6.从php中分配变量:
我们已经知道,我们可以利用smarty中的assign方法进行变量的赋值,那么smarty支持哪些变量形式呢?
Smarty支持php的大多数变量形式,例如,整数,浮点数,字符串,数组以及对象。
(1).整数
$smarty->assign("a",12);
(2).浮点数:
$smarty->assign("a",12.5);
(3).字符串:
$smarty->assign("a",”hello world”);
(3).数组:
$arr=new array(“demo1”,”demo2”,”demo3”);
$smarty->assign("a",$arr);
(3).对象:
Class people{
//省略属性和方法
}
$people=new people();
$smarty->assign("a",$people);
7.在模板文件中访问变量
(1).在smarty模板中,对整数、浮点数、字符串的访问是相同的。
Index.php:



Index.html:



输出结果:



(2).在smarty模板中,访问数组
Smarty对索引数组与关联数组的访问有一点差别,我们首先来说说smarty对索引数组的访问:
Index.php



Index.html



输出结果:



那么当模板需要输出的数组下标超过了数组下标的最大值,那么smarty会进行怎样的处理呢?答案是:不报错也不进行输出。



输出结果:



再次,我们来说一说smarty模板访问关联数组,smarty对于关联数组的访问并非是用<{$arr[“name”]}>的形式,而是利用<{$arr.name}>的方式,例如:
Index.php



Index.html



输出结果:



同样,若强制输出关联数组中的变量,比如我们强制输出<{$arr.year}>,smarty的处理也是不报错也不输出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  smarty模版
相关文章推荐