smarty学习浅析与笔记

【关于模版】2014/10/13
什么是模板?
实现html和PHP分离的就是模板


学习路径




1、自定义模板
html        {$content}
controller  
      str_replace('{','<?PHP',$str);
      str_replace('}','?>',$str);



2、smarty的工作流程
1)把需要赋值的全局变量 赋值 塞到对象内部的属性上
   一个数组里
2)编译模板 将对应的{$标签} 转换为PHP代码
3)引入编译后的文件


3、使用smarty的步骤
1)smarty是一个类 要使用必须先引入实例化
2)assign 赋值
3)display{编译到输出}


缺点:
模版编译浪费时间 


一次编译,不再编译
判断条件:
1)模板编译文件是否存在
在编译的时候如果模版已经存在,则不再次编译重写
file_exists()
2)编译文件的时间要大于模板修改的时间
filemtime()
同时满足上面两个条件才不重新进行编译


一、smarty的使用
1、下载smarty的下载、
www.smarty.net


2、使用
1)引入smarty
demo文件夹是使用的例子实例
lib下的 smarty.class.php 引入
require('smarty.class.php');



2)实例化
$smarty = new Smarty();
//配置模板目录
$smarty->template_dir = './temp';
$smarty->compile_dir = './comp';


3)赋值
$smarty->assign('title','变量例子');


4)在temp目录下创建模板 news.html
{$title} 放入要显示的标签内


5)显示
$smarty->display('news.html');


问题1:关于多个模板文件夹的使用
解决:不同的PHP文件可以设置不同的temlate_dir


问题2:可以赋值数组、对象 怎么赋值
解决:数组赋值
      
$smarty->assign('zhf',array('name'=>'张飞','age'=>'18'));
      显示:{$zhf.name}
      对象赋值 同上
      显示:{$zhf->name}



问题3:如果遇到 css{} script{}冲突如何解决
解决:1)修改smarty的默认定界符
        
 $smarty->left_delimiter = '{>';
 $smarty->left_delimiter = '<}';

      2) 使用<literal></literal>标签将冲突大括号前后加上




二、变量的来源
1、使用assign方法进行分配
$smarty->assign('name','shibae');


2、系统保留变量
$smarty.开头的变量会自动获取系统变量
$_GET/$_POST/$_SESSION 等等
{$smarty.get.id } 等价于 $_GET['id']


显示常量
$smarty.const.常量名


3、配置文件中的配置变量
如网站底部的电话信息 等写入配置文件
1)配置文件一般以.conf为后缀名


2)文件内容如下
name='zhangfei'
tel='1385895654'


3)配置config_dir
$smarty->config_dir='./conf';


4)将配置文件加入配置目录


5)在模板文件中引入配置文件
{config_load file='site.conf'}


6)引入配置文件变量内容
{$smarty.config.site}
或 {#site#}


三、模板中变量的操作
1、变量的计算
{$age+12} //可以参与运算 但是不推荐
或{$age - $num}


{3+$age} smarty2.6及以前 不支持
smarty3以后可以支持 不推荐数字写前面


四、模板中的逻辑操作
1、选择分支
1)if...else
{if $age < $num}
内容1
{else}
内容2
{/if}


2)if...elseif...else
{if $smarty.get.today || $smarty.get.today == 7 }
语句1
{else if $smarty.get.today >0 && $smarty.get.today < 6}
语句2
{else}
语句3


2、循环
1)for 循环 (smarty3新增)

只能从小到大 要从大到小就用while


{for $i=1 to 10} 
 循环部分。。。
{/for}
//限定步长,默认为1
{for $i=1 to 10 step=2} 
 循环部分。。。
{/for}


$i@iteration //当前计数器
$i@total //总的计数器




3)while (smarty3新增)
其中++只能放在变量后面
{while $age < 10}
  {$age++}
{/while}


4)foreach 循环
<pre name="code" class="html">smarty3 中的foreach结构
{foreach $goods as $k => $v }
smarty3 中的foreach结构
{foreach $goods as $k => $v }


{/foreach}
这里的计数器将 $i替换成 $v就可用了
$v@iteration
$v@first
$v@last
smarty2中的 foreach结构
{foreach from = $goods key=k item=v}


{/foreach}
 



5)section 功能多配置选项多 功能和
  foreach差不多
不能循环关联数组 只能循环索引为连续
下标的数组
www.smarty.net/docs/zh_CN/language/function
语法如下:
其中loop就是待循环的数组
name 是循环中的临时变量 即把键赋给good 
step 为步长 不写 默认为1
{section name=good loop = $goods step=2}
   {$goods[good].goods_name}
{/section}



五、变量调节器
是在模板中修改变量显示形式的一种功能
即通过变量调节器 来对变量进行修改


本质就是通过函数的调用传参 返回值进行输出
如 将日期和时间进行改变
{$timestamp|date_format:'%Y%m%d %H%M%S'}
{$title|lower}



六、缓存

//判断是否缓存

$smarty->is_cached('index.html', $id)

//局部不缓存

{nocache} 不缓存区。。。{/nocache}





七、模板的引入与使用
1)将smarty库文件拷入项目
2)引入smarty.class.php
3) new smarty


解决自动加载函数间的冲突
将 __autoload()
  函数命名为自定义函数 如:aload()
                           bload()
 然后使用系统自动加载注册函数
 spl_autoload_register('aload');
 spl_autoload_register('bload')


 冲突解决 


 八、模板内文件的包含

 {include file="header.html"}


先纪录至此,有不对之处。欢迎指正,以及交流学习。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值