smarty笔记

smarty缓存
smary引擎就是将美工写的模板文件和php程序员写的业务文件合成一个编译后的文件 然后后台去运行这个编译后的文件
不会提高速度也不会降低速度
Smarty和网页静态化是一个概念  Smarty比网页静态化要方便的多
1.需要开启缓存
2.指定一下缓存的时间 更新一次 然后再进行缓存
3.指定缓存文件保存位置

注意
1.一个模板只能有一个缓存文件,如果一个模板的多个文章,则需要每个文章有一个缓存
$tpl->display('test.tpl',$cacheid);
第二个参数 , 每变化一个值就会有一个不同的缓存
$tpl->display('test.tpl',$_SERVER['RIQUEST_URI']);
2.一定要处理 如果有缓存了就不要执行连接数据库和到数据库中操作数据表了
is_cached 是否被缓存
if(!is_cached('test.tpl'),$_SERVER['RIQUEST_URI']){
 
}
3.局部缓存的设置
{nocache}{/nocache} 自定义函数

注册的方式
$tpl->assign("date",date("H:i:s"));
$tpl->register_block('nocache','ncache',false);//默认经过块的都是缓存的 false表示不缓存
function ncache($param,$content){
  return $content;
}
$tpl->display('test.tpl',$_SERVER['RIQUEST_URI']);


插件的方式 块的方式
libs/plugins/
block_nocache.php
function smary_block_nocache($param,$content,&$s){
  return $content;
}

libs/编译的文件
$tag_con....标签名字
$this->_plugins('block')  ....//最后一个参数true 默认为缓存
if($tag_co == 'nocache'){
    最后一个参数设置为false  //不缓存
}

4.清除缓存
clear_cache('test.tbl');
clear_cache('test.tbl',cacheid);

$tbl->clear_all_cache();




phplib是一个模板

smarty使用注意事项:
1.因为我们访问时php文件,模板是在php中包含的内容、所以在模板中使用 图片,css文件,js文件 都要以访问的php目录为准
2.所有display模板时(还是模板中include),都要以Smarty对象中指定的模板目录为基目录
<{include default/header.tpl}>
<{include default/footer.tpl}>
3.如果想让各个目录下的php程序都可以加载Smarty和使用Smarty指定的模板和编译目录,唯一的办法就是使用绝对路径

Smarty注释不会在源文件中显示 编译的时候就已经把smarty过滤掉了
<{**}>

在smarty中数组可以直接用下标访问
<{*$arr[0]*}>
<{*$arr[2][0]*}>

关联数组,不是使用 [关联下标] 而是使用 .关联下标

对象
<{$obj->name}>
<{$obj->age}>
<{$obj->sex}>

在smary中可以参与运算

smarty的配置
$tpl->config_dir  = ROOT . 'configs';//配置文件

<{config_load file=configs/config.ini}>
<{ #变量名# }> #和变量无缝连接

配置文件
config.conf
border=0
bgcolor=green
[one]
aa=123123
bb=233223
[two]
cc=324u43
[three]
dd=dsjfsdj


<{ #border# }>

也可以这样访问smarty中的变量
<{ $smarty.config.border }>


<{config_load file=configs/config.ini section=one}> [设置区域]

保留变量
$_GET;
$_POST;
$_SESSION;
$_COOKIE;
$_FILES;这个没有  没有必要
$_GLOBALS;
$_ENV;
$_SERVER;
超全局数组
<{$smarty.get.page}>
<{$smarty.session.user1}>


常量
define('HOST','');
<{$smarty.const}>

<{$smarty.const.__FILE__}>

<{$smarty.now}>//当前服务器的时间

变量调节器

$tpl->register_function("hello","demo");
function demo($args){
  $tpl="";
  $args['name']
  return $tpl;
}
<{hello num="2" name="name" size="10"}>

写函数就是自定义html标记

块标记
<font>test</font>

$tpl->register_block($args,$content,&$smaryt,&$b);//$content就是test

块的概念
{if}
{/if}
函数的概念
{include}

可以这样用
<{hello num="2" content="12332 $int   erwerwe" name="name" size=$size}>
如果$int是数组的话要带上反引号  
<{hello num="2" content="12332 `$int` erwerwe" name="name" size=$size}>


smarty的插件
以插件的形式加入到Smarty源代码中

自定义html
一种是使用注册的方式 函数 块
一种插件的方式       函数 块

什么事变量调解器
自定义变量调解器
modifier.daxie.php
modifier.jieq.php
function smarty_modifer_jieq($str,$start,$end){

}

<{$str|jieq:"10":"20"|toupper:"upper"}>
truncate不支持中文

<{$smarty.now|date_format:"%Y-%m-%d"}>

<{$str|regex_replace:"\d":"##"}>

组合调节器的使用

1.内建函数
  在模板中的调用方式都和使用html标记类似
  smarty内部的函数,只能按手册提供的方式使用,不可以改,也不可以删
  比如,流程控制 if,数组的便利,以及文件包含,配置文件的导入都需要使用smarty的内建函数帮我们完成。
2.自定义函数
  在模板中的调用方式都和使用html标记类似
  1.可以通过注册和smarty插件方式,加入自己的函数到smarty中,相当于扩展
  2.系统提供的自定义函数可以改,可以删  

<{php}>//可以把php代码写入到里面
<{php}>
for($i=0;$i<10;$i++){
  echo '2222222222<br>';
}
<{php}>

在子模板中可以接受到主模板相同的变量


隐藏
<{capture name="cat"}>
ccccccccccccc<br>
<{/capture}>

保留变量  输出多份
<{$smarty.capture.cat}>
<{$smarty.capture.cat}>
<{$smarty.capture.cat}>
<{$smarty.capture.cat}>

<{if $var}>
ffffff<br>
<{else if $var="3"}>
dfjdj</br>
<{else}>
jjjj</br>
<{if}>

eq
neq
even 偶数
()  优先级

foreach,foreachelse
和php的foreach一样

这个循环共执行<{$smarty.foreach.one.total}>//保留变量
<{foreach from=$data item="val" key="k" name="one"}>
<{$k}>      <{$val}>
<{$smarty.foreach.two.iteration}>//和key一样
<{foreachelse}>
数组为空
<{/foreach}>

section,sectionelse
  和foreach一样,也可以遍历数组
  1.效率比使用foreach要高  编译成了for循环  下标必须是连续的
  2.功能要比foreach要多
 
注意:它不能遍历关联数组 只能是索引数组 并且下标是连续的

<{section loop=$data name="ls"}>
<{$data[ls]}><br>
<{sectionelse}>
无数据
<{section}>

foreach是把数组中的每个元素都重新赋给了一个变量
section直接去数组取值

<table algin="center" width="800" border="0">
    <{section loop=$data name="ls" start="2" step="2" max="4" }>//start从第2条记录开始 step每次跳2个  max最多循环34
        <tr>
             <td><{$data[ls].id}></td>
             <td><{$data[ls].name}></td>
             <td><{$data[ls].price}></td>
             <td><{$data[ls].num}></td>
             <td><{$data[ls].desc}></td>
        </tr>
    <{sectionelse}>
    无数据
    <{section}>
<table>
$smarty.section.ls.iteration  从1开始
$smarty.section.ls.index      从0开始  受start step max影响
$smarty.section.ls.rownum     不受start step max影响

你可能感兴趣的:(smarty笔记)