smarty的环境搭建,请查看sinceow的Smarty介绍与配置,在此不再重复(smarty就是个类,环境搭建只是让你更方便的引用这个类而已)
smarty的一些简单教程,我上传到4shared那
假如qier,health做了很漂亮的页面,我甚至不用去看他们的html代码,只要我们约定了输出变量名,就可以实现信息的交流,(以下所说html文件都只指前台做的页面,php都泛指逻辑处理页面,php存要站点内,html不在站点内),把他们所做的html放在模板文件夹templates里面,而这个templates文件夹推荐不放在站点内(由此可见,html并没有参与任何的逻辑处理)。好比如模特与时装的关系,php和js所做的是设计一件时装,而html是个模特,我们要靠这个模特穿着这个时装给别人看,时装可以不停的更换,而这个模特只是换了件衣服
我们永远看不到干巴巴,赤裸裸的模特
我们不会直接访问到html,甚至可以 说,我们所访问的都不是html,我们访问的全是php,第一个登陆页面是php,里面的所有链接都是php(php内不会有一句html代码),只是php经过了逻辑处理,准备好了数据,然后调用了html这个模特来向我们展示它的数据
让时装找到模特
当php准备好数据后,那怎样把数据传到html,让它展示呢?smarty里面有个很方便的传输基制
test.php
<?php include_once("Smarty.class.php");//引用smarty类 $smarty=new Smarty(); $smarty->templates_dir="../../Smarty/templates";//模板路径 $smarty->complie_dir="../../Smarty/templates_c";//编译路径 $smarty->left_delimiter="<{";//设置左标记符 $smarty->right_delimiter="}>";//设置右标记符 $smarty->config_dir="../../Smarty/configs/"; $smarty->caching=false; //设置路径 $myname="eqyun"; $smarty->assign("name",$myname); $smarty->display("templates/show.html"); ?>
show.html
<html> <body> 我叫<{$name}> </body> </html>
运行php就会得到(http://localhost/test.php) :
我叫eqyun
的输出效果,html直接用$name引用了php所定义的assign("name",$myname),这个name的值就是php中$myname的值,注意我们定义的<{}>标签
数据的处理都由php做,那是不是html就什么都不用管了呢?(我是很想这样,可惜不行),我觉得还有不能在php页面不能做得很方便的事,就是控制循环输出,比如说php查询了邮件的数据库,有5封邮件,那php传给html的是个数组,让html循环输出,说得不是很明白,看例子
email.php
<?php $sql="select * from emails"; $result=mysql($sql); $array=Array(); $i=0; while($row=mysql_fetch_row($result){ $array[$i]=Array("emai_id"=>row[0],"email_content"=>row[1]); $i++; } $smarty->assign("emails",$array); $smarty->display("../../templates/show_email"); ?>
show_emali.html执行http://localhost/email.php就会一下输出结果(假如我的数据库有两封邮件)<html> <body> <{section name=newId loop=$emails start=0}> <!--要执行的html代码--> 邮件id:<{$emails[newId].email_id}></br> 邮件内容:<{$emails[newId].email_content}></br> <{/section}>//停止循环 </body> </html>
section方法的具体参数,请参考smarty中文手册邮件id:1 邮件内容:我是第一封邮件 邮件id:2 邮件内容:我是第二封邮件
还有if的操作
这两类的控制输出,在html里执行,代码用<{}>标记(这是我们自己定义的)<{if xxxxx}> <!--为true执行的代码--> {<else>} <!--为false执行的代码--> <{/if}>//结束判断
用这种模板来做项目,路径问题要注意,smarty的做法可以理解为是php里面包含了html,所以不管你html是在哪个文件夹,链接路径是相对php文件来说的,比如以上的邮件例子
email.php,index.css存在php文件夹里面
php文件夹和show_email.html文件都存在web文件夹里面
那show_email.html引用index.css文件,一般的做法是
<link href ="./php/index.css" rel="Stylesheet" type="text/css" /
这样他会在http://localhost/php/php/index.css里找,提示找不到,正确的做法是
<link href ="./index.css" rel="Stylesheet" type="text/css" />
就是说,所有html的引用路径都必须以php的文件的位值为起点
看起来蛮简单的,动手起来就会发现有些很细的东西需要注意
对smarty初次总结
最新推荐文章于 2025-05-01 23:03:21 发布