smarty基础概念总结

来源:互联网 发布:海门java培训 编辑:程序博客网 时间:2024/05/16 07:31

该文章是smarty最最基础的知识点了。仅供小白参考。


1.什么是smarty3  ==>  分离html和PHP代码
smarty的目的就是实现业务与表现的分离。业务就是指数据库和操作数据库、而表现就是html布局、css渲染、JS控制效果。


<===============================================================>


2.smarty 的本质就是类,这个类模板,把在前台页面中的 <?php ?> 标签编程 {} 而已
分析html模板中的标签,生成响应的php文件,再引入php文件


<===============================================================>


3.smarty 的引入流程
<?php
1.引入smarty
require('../../smarty3/libs/Smarty.class.php');

2.实例化
$smarty = new Smarty;

3.配置(配置模板目录、编译目录)
$smarty->template_dir = "./temp";
$smarty->complie_dir = "./comp";

4.赋值
$smarty->assign('title','今天第一次学习smarty');
$smarty->assign('content','不知道该不该学!!!');

$zhangfei = array('name'=>'张飞', 'age'=>'25', 'weapon'=>'zhangbashemao');


5.输出
$smarty->display('01.php');


<===============================================================>
4.smarty 的标签和css的标签防止混淆    css中的{} 可能会和 php中的{} 混淆掉

解决办法:1.修改smarty的默认定界符,比如改成 !{  }!
$amsrty->left_delimiter = '!{';
$amsrty->right_delimiter = '}!';
   
  2.也可以使用{literal}{/literal} 来告诉smarty此处不用解析,直接输出  literal==》字面值,原本意思
  {literal} table{background:red;} {/literal}


<===============================================================>
5. smarty 标签的来源
在模板中,{$title} 存在,就说明 $title 被 assign(分配的意思) 赋过值,所以 $title 会显示
那么,smarty中的标签变量,还有什么,除了assign(除了给我分配了变量)


总结:
smarty标签变量来源于3个部分
1. php中assign分配的变量
2. smarty的系统保留变量
3. 从配置文件读取到的配置变量


实例 
require('../../smarty3/libs/Smarty.class.php');
$smarty = new Smarty;
$smarty->template_dir = "./temp";
$smarty->complie_dir = "./comp";
$smarty->conf_dir = "./conf";


变量来源( 3 中)
1.assign分配的变量
$smarty->assign('name','小东');
$smarty->assign('age', '25');
/*
html中
<p>{$name}</p>
<p>{$age}</p>
*/
2.系统保存变量(不用赋值, 直接使用!!!!)
{$smarty.get.id} 直接可以获取地址栏中的ID
{$smarty.post}
{$amsrty.session} 
{$smarty.cookie}
/*
<p> {$smary.get.id}</p> ==》 直接解析成  $_GET['id']
*/


//引用显示一个常量
define('HEI', 8858);
{$smarty.const.HEI}
3.配置文件中的配置变量
//有些数据,比如网站底部的电话信息,不想写入数据库中,可以写到配置文件中
//那么模板能读出配置文件的配置选项中来
1.配置文件一般以 .conf 作为后缀
2.配置文件的写法一般是
选项1=值 
选项2=值 
3.配置smarty的config_dir,并把配置文件放在该目录下




$smarty->display('04.html');


<===============================================================>


6.assign 用法深入探讨
require('../../smarty3/libs/Smarty.class.php');
$smarty = new Smarty;
$smarty->template_dir = "./temp";
// $smarty->complie_dir = "./comp";
$smarty->config_dir = "./conf";


$user = array('name'=>'zhangsan', 'age'=>'89');
$smarty->assign($user);
/*
等同于
$smarty->assign('name', 'zhangsan');
$smarty->assign('age', '89');
*/
//多维数组
$smarty->assign('arr',array('country'=>array('prov'=>array('city'=>'长治'))));


//对于同一标签会覆盖
$smarty->assign('name', 'lisi');


//apend 是追加的意思
//向一个标签赋多个值的时候,我们可以使用append进行追加,append追加到一个数组中
//可以理解为 append是把一个值放大到一个数组中
// assign是把一个数组压缩成一个值
$smarty->append('stu','刘备');
$smarty->append('stu','张飞');
//另外,smarty赋值的时候还可以引用赋值。
assignByRef('title', $title);
//效果是 _tpl_var['title'] = &title ;引用赋值
//这个功能应该去掉,意义不大。了解就行




$smarty->display('04.html');


<===============================================================>
7.变量调节器
modifier


变量调节器,是在模板中,修改变量的显示形式的一种功能
通过变量调节器,来对变量的值进行微调
比如吧时间戳变成正常时间


变量调节器的本质是一个函数
这个函数以标签对应的值作为参数,运算之后,把返回值放在标签处


具体的可以在手册中查看




在smarty的模板中可以控制隔行变色,js也可以控制隔行变色
但是,在js里控制最好


在php中可以进行时间格式化,在smarty中也可以格式化
但是在smarty中控制比较好


这就表示一个原则,业务与现实的分离,尽量分离


PHP本身就是负责判断条件,取出数据,至于显示的效果,应该尽量往前移
mysql->PHP->smarty模板->js
就好比,时间戳,事宜在mysql中以时间戳格式显示,在smarty中以格式化处理
也就是说,后台的数据应该尽量原始,不要有样式格式化
 而前台的显示的效果应该尽量靠前


<===============================================================>
8.smarty缓存


缓存
把页面内容保存在磁盘上,下次访问相同页面的时候,就直接返回保存的内容,这样就减轻了数据库的压力


smarty缓存的用法:
1.开启
2.配置缓存的生命命周期
3.判断是否缓存并是否从数据库取数据


//开启缓存
$smarty->caching = true;


//设置缓存的生命周期
$smarty->cache_lifetime = 3;


//设置缓存目录,用于存储缓存文件
$smarty->cache_dir = './cache';


局部缓存
在smarty页面缓存的情况下,可以设置部分不缓存。因为有的页面的木一部分,像随机广告、股票信息、事件等等就不应该缓存起来
在smarty中,想要控制局部不缓存,方法很多
1.在标签中控制该标签不缓存{$标签 nocache}
<h2>当前时间{$time|date_format:"%D %H:%M:%S" nocache}</h2>
2.控制一片便签,不缓存,使用{nocache}xxxxxxxx{/nochche}
{nocache}
<h2>当前时间{$time|date_format:"%D %H:%M:%S"}</h2>
<h2>当前时间{$time|date_format:"%D %H:%M:%S"}</h2>
{/nocache}
3.在php中赋值时就设置不缓存
$smarty->assign('time1', $time, true); //第3个参数为true是为不缓存
不缓存的值,应该总能从php中得到值,意思就是不要放进缓存体中

4.使用{insert name="xxx" parn1="v1" parn2="v2"} 的方式
原理是 insert_xxx(array(parn1="v1" parn2="v2"));的返回值来显示
所以php文件中可以用
function insert_welcome($parn){
return '你好'.$parn['age'].rand(100, 9999);
}
所以html中应该写
{insert name="welcome" age="你猜猜"}


单页面多缓存


由于商品的单页面的原因,我们能否根据不同的id生成不同的缓存
用到的知识点是,单模板,多缓存
原理是,在生成缓存的时候,可以再传一个“缓存id”
如果 id不同,缓存文件不同
$smarty->display('13.html', $goods_id);

所以,我们要明白,我们的哪些参数会影响页面,我们就要把那些参数当做缓存id
像页数 用户等级 栏目 商品id之类的
比如,page和cat 会影响结果,我们就要把这两个参数都写进缓存id
(多个参数通过某种方式变成一个字符串,ecshop中使用 src32() 方法)


经典参考:ecshop的缓存控制


但是,要考虑,页面其实没有必要缓存的,我们只要缓存数据就OK了。。所以,我们可以考虑memcached只缓存数据,而且会自动过期






缓存的删除
$smarty->clearCache(模板名,缓存id);
$smarty->clearCache('13.html',$goods_id);


有时候出于调试的目的,临时不让缓存,单不想修改代码
使用方法,加一个选项
$smarty->force_cache = true;  //force 强迫,武力


<===============================================================>


9.foreach 循环
/**


从数据库中取出数据,把数据赋给smarty,然后smarty把数据展示到模板。然后模板中的标签进行循环


foreach循环是smarty中非常重要的循环,需要认真学习。联系


手册地址http://www.smarty.net/docs/zh_CN/language.function.foreach.tpl
**/
require('../../smarty3/libs/Smarty.class.php');
require('./MySmarty.php');


//连接数据库
$conn = mysql_connect('localhost', 'root', '123456');
mysql_query('set name utf8');
mysql_query('use shop');


$sql = "select goods_id, goods_name, shop_price, add_time from goods limit 5";
$rs = mysql_query($sql, $conn);


$goods = array();
while ($row = mysql_fetch_assoc($rs)) {
$goods[] = $row;
}
// print_r($goods);


$smarty = new MySmarty();


//把数组赋给smarty
$smarty->assign('goods', $goods);


$smarty->display('10.html');







0 0
原创粉丝点击