对smarty初次总结


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

<html>
  <body>
    <{section name=newId loop=$emails start=0}>
      <!--要执行的html代码-->
     邮件id:<{$emails[newId].email_id}></br>
    邮件内容:<{$emails[newId].email_content}></br>
 <{/section}>//停止循环
 </body>
</html>
执行http://localhost/email.php就会一下输出结果(假如我的数据库有两封邮件)

邮件id:1
邮件内容:我是第一封邮件
邮件id:2
邮件内容:我是第二封邮件
section方法的具体参数,请参考smarty中文手册

还有if的操作

<{if xxxxx}>
      <!--为true执行的代码-->
   {<else>}
       <!--为false执行的代码-->
 <{/if}>//结束判断
这两类的控制输出,在html里执行,代码用<{}>标记(这是我们自己定义的)

用这种模板来做项目,路径问题要注意,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的文件的位值为起点


看起来蛮简单的,动手起来就会发现有些很细的东西需要注意





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值