九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
PHP核心之模板引擎Smarty

Smarty

Smarty簡(jiǎn)介

  • 概念
    • 為了分工合作,模板頁(yè)面中最好不要出現(xiàn)PHP的代碼
    • 需要將表現(xiàn)和內(nèi)容相分離

官方Smarty

  • 概念

    • Smarty是用PHP編寫(xiě)的優(yōu)秀的模板引擎
    • Smarty可以實(shí)現(xiàn)前端開(kāi)發(fā)人員和后臺(tái)程序員分離
    • 采用Smarty編寫(xiě)的程序可以獲得最大速度的提高
    • 需要實(shí)時(shí)更新的內(nèi)容和小項(xiàng)目不適合使用Smarty
  • 官方地址

    • www.smarty.net
  • Smarty常用屬性

    • public $left_delimiter = "{"; 左界定
    • public $right_delimiter = "}"; 右界定
    • protected $template_dir = array('./templates/'); 默認(rèn)模板目錄
    • protected $compile_dir = './templates_c/'; 默認(rèn)混編目錄
    • protected $config_dir = array('./configs/'); 默認(rèn)配置目錄
    • protected $cache_dir = './cache/'; 默認(rèn)緩存目錄
  • Smarty常用方法

    • public function setTemplateDir(){} 設(shè)置模板文件夾
    • public function setConfigDir(){} 設(shè)置配置文件夾
    • public function setCompileDir(){} 設(shè)置混編文件夾
    • public function setCacheDir(){} 設(shè)置緩存文件夾
  • 小試牛刀

    • 將libs目錄拷貝到站點(diǎn)下,改名為Smarty
    • 創(chuàng)建模板目錄templates,目錄下新建index.html
    • 創(chuàng)建混編目錄templates_c
    • 在站點(diǎn)下創(chuàng)建文件index.php
<?phprequire './Smarty/Smarty.class.php';$smarty=new Smarty();$smarty->assign('title','鋤禾日當(dāng)午');$smarty->left_delimiter='{{';//更改左界定$smarty->right_delimiter='}}';//更改右界定$smarty->setTemplateDir('./templates/');//設(shè)置模板目錄$smarty->setCompileDir('./templates_c/');//設(shè)置混編目錄$smarty->display('index.html');?>
# index.html<body>{{$title}}</body>

Smarty演化

演化一:Smarty生成混編文件

  • html文件
# index.html<body>    {$title}</body>
  • php文件
# index.php<?php$title= 'Smarty';$str=file_get_contents('./index.html');$str=str_replace('{','<?php echo ',$str);    //替換左大括號(hào)$str=str_replace('}',';?>',$str);    //替換右大括號(hào)file_put_contents('./index.html.php', $str);//寫(xiě)入混編文件require './index.html.php';//包含混編文件?>
  • 生成文件
# index.html.php<body>    <?php echo $title;?></body>
  • 相當(dāng)于代碼
<?php    $title= 'Smarty';?><body>    <?php echo $title;?></body>

演化二:Smarty封裝

  • 概念
    • 由于每個(gè)頁(yè)面都要替換定界符,所以需要將替換定界符的代碼封裝起來(lái)
    • 由于封裝在類(lèi)中,所有訪問(wèn)的方法需要通過(guò)面向?qū)ο蟮姆绞絹?lái)訪問(wèn)
    • 需要將外部的變量賦值到對(duì)象的內(nèi)部
    • 要通過(guò)面向?qū)ο蟮姆绞皆L問(wèn)
# Smarty.class.php<?phpclass Smarty{private $tpl_var=array();//賦值public function assign($k,$v){$this->tpl_var[$k]=$v;}/**作用:編譯模板*@param $tpl string 模板的路徑*/public function compile($tpl){$com_file=$tpl.'.php';                                //混編文件地址$str=file_get_contents($tpl);$str=str_replace('{$','<?php echo $this->tpl_var[\'',$str);//替換左大括號(hào)$str=str_replace('}','\'];?>',$str);            //替換右大括號(hào)file_put_contents($com_file, $str);                        //寫(xiě)入混編文件require $com_file;                                        //包含混編文件}}?>
# index.html<body>    {$title}</body>
# index.php<?phprequire './Smarty.class.php';$smarty=new Smarty();$smarty->assign('title','我的祖國(guó)');$smarty->compile('./index.html');?>

演化三:有條件的生成混編文件

  • 概念
    • 混編文件存在并且是最新的就直接包含,否則就重新生成
    • 板文件修改時(shí)間 < 混編文件修改時(shí)間 => 混編文件是最新的
# Smarty.class.php<?phpclass Smarty{private $tpl_var=array();//賦值public function assign($k,$v){$this->tpl_var[$k]=$v;}/**作用:編譯模板*@param $tpl string 模板的路徑*/public function compile($tpl){        $com_file=$tpl.'.php';      //混編文件地址        //文件存在,并且模板文件修改時(shí)間<混編文件修改時(shí)間if(file_exists($com_file) && filemtime($tpl)<filemtime($com_file))            require $com_file;        else{            $str= file_get_contents($tpl);            $str= str_replace('{$','<?php echo $this->tpl_var[\'',$str);//替換左大括號(hào)            $str= str_replace('}','\'];?>',$str);                //替換右大括號(hào)            file_put_contents($com_file, $str);                            //寫(xiě)入混編文件            require $com_file;                                            //包含混編文件        }                                       }}?>

演化四:文件分類(lèi)存放

  • 目錄
    • 模板文件:view
    • 混編文件:viewc
    • Smarty文件:smarty.class.php
# Smarty.class.php<?phpclass Smarty{public $template_dir='./templates/';//默認(rèn)模板目錄public $templatec_dir='./templates_c/';//默認(rèn)混編目錄private $tpl_var=array();//賦值public function assign($k,$v){$this->tpl_var[$k]=$v;}/**作用:編譯模板*@param $tpl string 模板的名字*/public function compile($tpl){$tpl_file=$this->template_dir.$tpl;//拼接模板地址$com_file=$this->templatec_dir.$tpl.'.php';//混編文件地址//文件存在,并且模板文件修改時(shí)間<混編文件修改時(shí)間if(file_exists($com_file) && filemtime($tpl_file)<filemtime($com_file))require $com_file;else{$str=file_get_contents($tpl_file);$str=str_replace('{$','<?php echo $this->tpl_var[\'',$str);//替換左大括號(hào)$str=str_replace('}','\'];?>',$str);//替換右大括號(hào)file_put_contents($com_file, $str);//寫(xiě)入混編文件require $com_file;//包含混編文件}}}?>
# index.php<?phprequire './Smarty/Smarty.class.php';$smarty=new Smarty();$smarty->template_dir='./view/';//更改模板目錄$smarty->templatec_dir='./viewc/';//更改混編目錄$smarty->assign('title','Sunny');$smarty->compile('index.html');?>

演化五:封裝編譯方法

  • 概念
    • 編譯的方法是smarty的核心方法
    • 核心方法一般是不可以直接調(diào)用,需要進(jìn)行二次封裝
# Smarty.class.php<?phpclass Smarty{public $template_dir='./templates/';//默認(rèn)模板目錄public $templatec_dir='./templates_c/';//默認(rèn)混編目錄private $tpl_var=array();//賦值public function assign($k,$v){$this->tpl_var[$k]=$v;}public function display($tpl){require $this->compile($tpl);}/**作用:編譯模板*@param $tpl string 模板的名字*/private function compile($tpl){$tpl_file=$this->template_dir.$tpl;//拼接模板地址$com_file=$this->templatec_dir.$tpl.'.php';//混編文件地址//文件存在,并且模板文件修改時(shí)間<混編文件修改時(shí)間if(file_exists($com_file) && filemtime($tpl_file)<filemtime($com_file))return $com_file;else{$str=file_get_contents($tpl_file);$str=str_replace('{$','<?php echo $this->tpl_var[\'',$str);//替換左大括號(hào)$str=str_replace('}','\'];?>',$str);//替換右大括號(hào)file_put_contents($com_file, $str);//寫(xiě)入混編文件return $com_file;//包含混編文件}}}?>
# index.php<?phprequire './Smarty/Smarty.class.php';$smarty=new Smarty();$smarty->template_dir='./view/';//更改模板目錄$smarty->templatec_dir='./viewc/';//更改混編目錄$smarty->assign('title','Sunny');$smarty->display('index.html');?>

Smarty注釋

  • 語(yǔ)法

    • {* *}
  • 說(shuō)明

    • smarty注釋在源碼中看不見(jiàn)
    • 若smarty的定界符是{* *},則它的注釋是{** **}

Smarty變量

  • 概念
    • Smarty中變量有三種,普通變量、配置變量、保留變量

普通變量

  • 概念
    • 普通變量就是自定義變量
    • 自定義變量可以在PHP中定義
      • $smarty->assign('key','value');
    • 自定義變量可以在模板中定義
      • {assign var='變量名' value='值'}
    • 自定義變量的簡(jiǎn)化寫(xiě)法
      • {$key='value'}
# index.php<?phprequire './Smarty/Smarty.class.php';$smarty=new Smarty();$smarty->assign('name','Sunny');$smarty->left_delimiter='{{';//更改左界定$smarty->right_delimiter='}}';//更改右界定$smarty->setTemplateDir('./templates/');//設(shè)置模板目錄$smarty->setCompileDir('./templates_c/');//設(shè)置混編目錄$smarty->display('index.html');?>
# index.html<body>姓名:{{$name}}<br>{{assign var='age' value='28'}}年齡:{{$age}}<br>{{$grade='高三8班'}}班級(jí):{{$grade}}<br></body>

保留變量

  • 概念

    • Smarty中有一個(gè)特殊的保留變量(內(nèi)置變量)
    • 類(lèi)似于PHP中的所有的超全局變量、常量、時(shí)間等信息
  • 內(nèi)置變量

    • {$smarty.get.name} 獲取get提交的name的值
    • {$smarty.post.name} 獲取post提交的name的值
    • {$smarty.request.name} 獲取get和post提交的name的值
    • {$smarty.cookies.name} 獲取cookie中的name的值
    • {$smarty.session.name} 獲取session中的name的值
    • {$smarty.const.name} 獲取常量定義的name值
    • {$smarty.server.DOCUMENT_ROOT} 獲取服務(wù)器的虛擬根目錄地址
    • {$smarty.config.name} 獲取配置文件中的值
    • {$smarty.now} 時(shí)間戳
    • {$smarty.ldelim} 獲取左界定
    • {$smarty.rdelim} 獲取右界定
# index.php<?phprequire './Smarty/Smarty.class.php';$smarty=new Smarty();define('name','define value');setcookie('name','cookie value');$_SESSION['name']='session value';$_POST['name']='post value';$_GET['name']='get value';$_REQUEST['name']='request value';$smarty->left_delimiter='{';//更改左界定$smarty->right_delimiter='}';//更改右界定$smarty->setTemplateDir('./templates/');//設(shè)置模板目錄$smarty->setCompileDir('./templates_c/');//設(shè)置混編目錄$smarty->display('index.html');?>
# index.html<body>get提交:{$smarty.get.name}<br>post提交:{$smarty.post.name}<br>request提交:{$smarty.request.name}<br>常量:{$smarty.const.name}<br>cookie的值:{$smarty.cookies.name}<br>session的值:{$smarty.session.name}<br>時(shí)間戳:{$smarty.now}<br>版本號(hào):{$smarty.version}<br>根目錄:{$smarty.server.DOCUMENT_ROOT}<br>左界定:{$smarty.ldelim}<br>右界定:{$smarty.rdelim}<br></body>

配置變量

  • 概念

    • 從配置文件中獲取變量值,配置文件默認(rèn)的文件夾是configs
  • 流程

    • 在站點(diǎn)下創(chuàng)建配置文件夾configs
    • configs目錄下創(chuàng)建smarty.conf文件
    • index.php PHP配置頁(yè)面
    • index.html 視圖頁(yè)面
# smarty.confcolor= '#21f4b1';size='15px';
# index.php<?phprequire './Smarty/Smarty.class.php';$smarty=new Smarty();$smarty->display('index.html');?>
# index.html{config_load file='smarty.conf'}   <!--引入配置文件--><style>body{color:{$smarty.config.color};font-size: {#size#}}</style><body><span>測(cè)試文本</span></body>
  • 關(guān)于配置文件
    • 要使用配置文件中的值,首先必須引入配置文件,通過(guò){config_load}標(biāo)簽引入
    • 獲取配置文件中值的方法有兩種
      • {#變量名#}
      • {$smarty.config.變量名}
    • 配置文件中的節(jié)
      • 在配置文件中,[ ]表示配置文件的段落
    • 配置文件說(shuō)明
      • 全局的一定要寫(xiě)在節(jié)的前面
      • 配置文件中[ ]表示節(jié)
      • 配置文件中的注釋是 #
      • 通過(guò)section引入配置文件中的段落
# smarty.confcolor= #1e6bec;size=32px;[spring]# 配置文件中的段落color=#9cec1e;size=24px;[winter]color=#ec1ee5;size=56px;
# index.html{config_load file='smarty.conf'  section='winter'}   <!--引入配置文件--><style>body{color:{$smarty.config.color};font-size: {#size#}}</style><body><span>測(cè)試文本</span></body>

smarty運(yùn)算符

  • 概念

    • Smary中的運(yùn)算符和PHP是一樣的
    • 除此以外,Smarty還支持如下的運(yùn)算符
  • 運(yùn)算符

    • eq 相等(equal)
    • neq 不等于(not equal)
    • gt 大于(greater than)
    • lt 小于(less than)
    • lte 小于等于(less than or equal)
    • gte 大于等于(great than or equal)
    • is even 是偶數(shù)
    • is odd 是奇數(shù)
    • is not even 不是偶數(shù)
    • is not odd 不是奇數(shù)
    • not
    • mod 求模取余
    • div by 被整除
    • is [not] div by 能否被某數(shù)整除
      • {if $smarty.get.age is div by 3}...{/if}
    • is [not] even by 商的結(jié)果是否為偶數(shù)
    • is [not] odd by 商的結(jié)果是否為奇數(shù)

判斷

  • 概念

    • 在判斷中是可以使用PHP函數(shù)的
  • 語(yǔ)法

    • {if 條件}
    • {elseif 條件}
    • {else}
    • {/if}
# index.php<?phprequire './Smarty/Smarty.class.php';$smarty=new Smarty();$smarty->display('index.html');?>
# index.html{config_load file='smarty.conf'  section='winter'}   <!--引入配置文件--><style>body{color:{$smarty.config.color};font-size: {#size#}}</style><body>{if is_numeric($smarty.get.score)}{if $smarty.get.score gte 90}<span>A</span>{elseif  $smarty.get.score gte 80}<span>B</span>{elseif  $smarty.get.score gte 70}<span>C</span>{elseif  $smarty.get.score gte 60}<span>D</span>{elseif  $smarty.get.score lt 60}<span>E</span>{/if}{else}<span>不是數(shù)字</span>{/if}<hr>{if is_numeric($smarty.get.score)}{if $smarty.get.score is even}<span>是偶數(shù)</span>{elseif $smarty.get.score is odd}<span>是奇數(shù)</span>{/if}{/if}</body>

數(shù)組

  • 概念
    • Smarty中訪問(wèn)數(shù)組的方式有兩種
      • 數(shù)組[下標(biāo)]
      • 數(shù)組.下標(biāo)
# index.php<?phprequire './Smarty/Smarty.class.php';$smarty=new Smarty();$stu= array('Sunny', 'Jerry');$emp= array('name'=>'Marry', 'sex'=>'girl');$goods= array(    array('name'=>'ceilphone','price'=>2560),    array('name'=>'notebook','price'=>3600));$smarty->assign('stu',$stu);$smarty->assign('emp',$emp);$smarty->assign('goods',$goods);$smarty->display('index.html');?>
# index.html{config_load file='smarty.conf'}   <!--引入配置文件--><style>body{color:{$smarty.config.color};font-size: {#size#}}</style><body><div>學(xué)生:{$stu[0]}  {$stu[1]}</div><div>雇員:{$emp['name']}  {$emp.sex}</div><div>商品:</div><ul><li>{$goods[0]['name']}</li><li>{$goods[0].price}</li><li>{$goods[1]['name']}</li><li>{$goods[1].price}</li></ul></body>

循環(huán)

  • 概念
    • Smarty中支持的循環(huán)有:{for} {while} {foreach} {section}
    • 對(duì)于開(kāi)發(fā)來(lái)說(shuō)用的最多就是{foreach}循環(huán)

for循環(huán)

  • 語(yǔ)法
    • {for 初始值 to 結(jié)束值 [step 步長(zhǎng)]} {/for}
    • 默認(rèn)步長(zhǎng)是1
# index.html<body>{for $i=0 to 10 step 2}<div>一江春水向東流</div>{/for}</body>

while循環(huán)

  • 語(yǔ)法
    • {while 條件} {/while}
# index.html<body>{$i=0}{while $i<5 }<div>{$i  } 一江春水向東流</div>{/while}</body>

foreach

  • 概念

    • 既能遍歷關(guān)聯(lián)數(shù)組也能遍歷索引數(shù)組
  • 語(yǔ)法

    • {foreach 數(shù)組 as $k=>$v}
    • {foreachelse}
    • {/foreach}
  • foreach的屬性

    • @index 從0開(kāi)始的索引
    • @iteration 從1開(kāi)始的編號(hào)
    • @first 是否是第一個(gè)元素
    • @last 是否是最后一個(gè)元素
# index.php<?phprequire './Smarty/Smarty.class.php';$smarty=new Smarty();$stu= array(    'first'=>'Sunny',    'second'=>'Jerry',    'third'=>'Marry',    'forth'=>'Tommy');$smarty->assign('stu',$stu);$smarty->display('index.html');?>
# index.html<body><table border='1' bordercolor='#000' width='780'><tr><th>是否是第一個(gè)元素</th><th>索引</th><th>編號(hào)</th><th>鍵</th><th>值</th><th>是否是最后一個(gè)元素</th></tr>{foreach $stu as $k=>$v}<tr><td>{if $v@first==1}<span>是第一個(gè)元素</span>{/if}</td><td>{$v@index}</td><td>{$v@iteration}</td><td>{$k}</td><td>{$v}</td><td>{if $v@last==1}<span>是最后一個(gè)元素</span>{/if}</td></tr>{foreachelse}沒(méi)有輸出{/foreach}</table></body>

section

  • 概念

    • section不支持關(guān)聯(lián)數(shù)組,只能遍歷索引數(shù)組
  • 語(yǔ)法

    • {section name=自定義名字 loop=數(shù)組} {/section}
# index.php<?phprequire './Smarty/Smarty.class.php';$smarty=new Smarty();$stu= array('Sunny','Jerry','Marry','Tommy');$smarty->assign('stu',$stu);$smarty->display('index.html');?>
# index.html<body><table border='1' bordercolor='#000' width='780'><tr><th>是否是第一個(gè)元素</th><th>索引</th><th>編號(hào)</th><th>值</th><th>是否是最后一個(gè)元素</th></tr>{section name=s loop=$stu}<tr><td>{if $smarty.section.s.first ==1}是第一個(gè)元素{/if}</td><td>{$smarty.section.s.index}</td><td>{$smarty.section.s.iteration}</td><td>{$stu[s]}</td><td>{if $smarty.section.s.last==1}是最后一個(gè)元素{/if}</td></tr>{sectionelse}沒(méi)有輸出{/section}</table></body>

函數(shù)

  • 概念
    • Smarty的內(nèi)置函數(shù)就是封裝的PHP的關(guān)鍵字
    • 函數(shù)有兩種,自定義函數(shù)和內(nèi)置函數(shù)

內(nèi)置函數(shù)

  • {$var=...} 變量賦值

    • 這是{assign}函數(shù)的簡(jiǎn)寫(xiě)版
    • 你可以直接賦值給模版,也可以為數(shù)組元素賦值
  • {assign} 賦值

    • 用來(lái)在模板運(yùn)行時(shí)為模板變量賦值
  • {while} 循環(huán)

    • Smarty的{while}循環(huán)與php的while語(yǔ)句一樣富有彈性
  • {for} 循環(huán)

    • {for}、{forelse}標(biāo)簽用來(lái)創(chuàng)建一個(gè)簡(jiǎn)單循環(huán)
  • {foreach} 遍歷

    • {foreach}與{section}循環(huán)相比更簡(jiǎn)單、語(yǔ)法更干凈
    • 也可以用來(lái)遍歷關(guān)聯(lián)數(shù)組
  • {section} 遍歷數(shù)組

    • 支持循序索引遍歷數(shù)組中的數(shù)據(jù)(支持一次性讀取多維數(shù)組)
  • {function} 函數(shù)

    • 用來(lái)在模板中創(chuàng)建函數(shù),可以像調(diào)用插件函數(shù)一樣調(diào)用它們
  • {if} 條件

    • Smarty的{if}語(yǔ)句與php的if語(yǔ)句一樣富有彈性
  • {include} 包含

    • {include}標(biāo)簽用于在當(dāng)前模板中包含其它模板
  • {nocache} 禁止緩存

    • {nocache}用來(lái)禁止模版塊緩存

變量修飾器

變量修飾器

  • 概念
    • 變量修飾器的本質(zhì)就是PHP函數(shù),用來(lái)轉(zhuǎn)換數(shù)據(jù)
    • 將PHP的關(guān)鍵字或函數(shù)封裝成標(biāo)簽稱(chēng)為函數(shù)
    • 將PHP關(guān)鍵字封裝成smarty關(guān)鍵字稱(chēng)為修飾器
    • 內(nèi)部的本質(zhì)都是PHP函數(shù)或PHP關(guān)鍵字
    • |稱(chēng)為管道運(yùn)算符,將前面的參數(shù)傳遞后后面的修飾器使用
# index.php<body>轉(zhuǎn)成大寫(xiě):{'abc'|upper} <br>轉(zhuǎn)成小寫(xiě):{'ABC'|lower} <br>默認(rèn)值:{$add|default:'地址不詳'}<br>去除標(biāo)簽:{'<b>你好嗎</b>'|strip_tags}<br>實(shí)體轉(zhuǎn)換:{'<b>你好嗎</b>'|escape}<br>日期:{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'}<br>多個(gè)管道連續(xù)使用:{'<b>boy</b>'|strip_tags|upper}<br></body>

自定義變量修飾器

  • 概念

    • 變量修飾器存放在plugins目錄中
  • 規(guī)則

    • 文件的命名規(guī)則:modifier.變量修飾器名稱(chēng).php
    • 文件內(nèi)方法命名規(guī)則:smarty_modifier_變量修飾器名稱(chēng)(形參...){}
  • 例題

    • 在plugins目錄中創(chuàng)建modifier.cal.php頁(yè)面
    • 在模板中調(diào)用
      • 10作為第一個(gè)參數(shù)傳遞
      • 參數(shù)之間用冒號(hào)分隔
# modifier.cal.php<?phpfunction smarty_modifier_cal($num1,$num2,$num3){return $num1 $num2 $num3;}?>
# index.html{10|cal:20:30}

避免Smarty解析

  • 概念

    • Smarty的定界符和css、js中的大括號(hào)產(chǎn)生沖突的時(shí)候
    • css、js中的大括號(hào)不要被Smarty解析
  • 方法

    • 更換定界符
    • 左大括號(hào)后面添加空白字符
    • {literal} {/literal}
      • smarty不解析{literal} {/literal}中的內(nèi)容
# index.html<style>{literal}body{color: #FF0000;}{/literal}</style>

緩存

  • 概念
    • 緩存一般包括頁(yè)面緩存、空間緩存、數(shù)據(jù)緩存
    • smarty的緩存是頁(yè)面緩存

開(kāi)啟緩存

  • 開(kāi)啟緩存
    • $smarty->caching=true|1;

緩存的更新

  • 方法
    • 刪除緩存,系統(tǒng)會(huì)重新生成新的緩存文件
    • 更新了模板文件,配置文件,緩存自動(dòng)更新
    • 過(guò)了緩存的生命周期,默認(rèn)是3600秒
    • 強(qiáng)制更新
# index.php<?phprequire './Smarty/smarty.class.php';$smarty=new Smarty();$smarty->caching=true;//開(kāi)啟緩存if(date('H')>=9)$smarty->force_cache=true;//強(qiáng)制更新緩存$smarty->display('index.html');?>

緩存的生命周期

  • 語(yǔ)法
    • $smarty->cache_lifetime=-1 | 0 | N
      • -1:永遠(yuǎn)不過(guò)期
      • 0:立即過(guò)期
      • N:有效期是N秒,默認(rèn)是3600秒
$smarty->cache_lifetime=3;//緩存的生命周期

局部不緩存

  • 不緩存的方法
    • 變量不緩存 {$變量名 nocache}
    • 整個(gè)塊不緩存 {nocache} {/nocache}
{$smarty.now nocache}
{nocache}{$smarty.now}{/nocache}

緩存分頁(yè)

  • 概念

    • 通過(guò)識(shí)別id來(lái)緩存分頁(yè)、集合
  • 語(yǔ)法

    • $smarty->display(模板,識(shí)別id)
# index.php<?phprequire './Smarty/smarty.class.php';$smarty=new Smarty();$smarty->caching=1;$smarty->display('index.html',$_GET['pageno']);?>
# index.html<body>這是第{$smarty.get.pageno}頁(yè)</body>

緩存集合

  • 概念
    • 每個(gè)組合都會(huì)產(chǎn)生緩存
# index.php<?phprequire './Smarty/smarty.class.php';$smarty=new Smarty();$smarty->caching=1;$color=$_GET['color'];$size=$_GET['size'];$smarty->display('7-demo.html',"$color|$size");?>
# index.html<body>顏色:{$smarty.get.color}<br>大?。簕$smarty.get.size}<br></body>

清除緩存

  • 語(yǔ)法
    • $smarty->clearCache(模板,[識(shí)別id]) 清除緩存
    • $smarty->clearAllCache(); 清除所有緩存
# index.php<?phprequire './Smarty/smarty.class.php';$smarty=new Smarty();//$smarty->clearCache('7-demo.html',1);//$smarty->clearCache('7-demo.html','red|10');//$smarty->clearCache('7-demo.html');$smarty->clearAllCache();//清除所有緩存?>

將smarty集成到項(xiàng)目中

  • 流程
    • 將smarty拷貝到Lib目錄下
    • 實(shí)現(xiàn)smarty類(lèi)的自動(dòng)加載
    • 創(chuàng)建混編目錄,并且定義混編目錄地址
      • Viewc 為混編目錄
    • 由于前后臺(tái)都要啟動(dòng)模板,所以應(yīng)該在基礎(chǔ)控制器中實(shí)例化smarty
    • 在控制器中使用smarty
    • 在模板中更改
# Framework/Core/Framework.class.phpprivate static function initRoutes(){$p=$_GET['p']??$GLOBALS['config']['app']['dp'];$c=$_GET['c']??$GLOBALS['config']['app']['dc'];$a=$_GET['a']??$GLOBALS['config']['app']['da'];$p=ucfirst(strtolower($p));$c=ucfirst(strtolower($c));//首字母大寫(xiě)$a=strtolower($a);//轉(zhuǎn)成小寫(xiě)define('PLATFROM_NAME', $p);    //平臺(tái)名常量define('CONTROLLER_NAME', $c);  //控制器名常量define('ACTION_NAME', $a);      //方法名常量define('__URL__', CONTROLLER_PATH.$p.DS);   //當(dāng)前請(qǐng)求控制器的目錄地址define('__VIEW__',VIEW_PATH.$p.DS);     //當(dāng)前視圖的目錄地址define('__VIEWC__', APP_PATH.'Viewc'.DS.$p.DS); //混編目錄}private static function initAutoLoad(){spl_autoload_register(function($class_name){//Smarty類(lèi)存儲(chǔ)不規(guī)則,所以將類(lèi)名和地址做一個(gè)映射$map=array('Smarty' => LIB_PATH.'Smarty'.DS.'Smarty.class.php');$namespace= dirname($class_name);   //命名空間$class_name= basename($class_name); //類(lèi)名if(in_array($namespace, array('Core','Lib')))   //命名空間在Core和Lib下$path= FRAMEWORK_PATH.$namespace.DS.$class_name.'.class.php';elseif($namespace=='Model')     //文件在Model下$path=MODEL_PATH.$class_name.'.class.php';elseif($namespace=='Traits')    //文件在Traits下$path=TRAITS_PATH.$class_name.'.class.php';elseif(isset($map[$class_name]))$path=$map[$class_name];else   //控制器$path=CONTROLLER_PATH.PLATFROM_NAME.DS.$class_name.'.class.php'; // $path=__URL__.$class_name.'.class.php';if(file_exists($path) && is_file($path))require $path;});}
# Framework/Core/Controller.class.php<?php//基礎(chǔ)控制器namespace Core;class Controller{    protected $smarty;    use \Traits\Jump;        public function __construct() {        $this->initSession();        $this->initSmarty();    }    //初始化session    private function initSession(){        new \Lib\Session();    }    //初始化Smarty    private function initSmarty(){        $this->smarty=new \Smarty();        $this->smarty->setTemplateDir(__VIEW__);   //設(shè)置模板目錄        $this->smarty->setCompileDir(__VIEWC__);//設(shè)置混編目錄    }}?>
# Application/Controller/Admin/ProductsController.class.phppublic function listAction(){// 實(shí)例化數(shù)據(jù)模型$model= new \Model\ProductsModel();$list= $model->select();// 加載視圖require __VIEW__.'products_list.html';$this->smarty->assign('list',$list);$this->smarty->display('products_list.html');}
# Application/View/Admin/products_list.html{foreach $list as $rows}<tr><td>{$rows['proID']}</td><td>{$rows['proname']}</td><td>{$rows['proprice']}</td><td><a href="index.php?p=Admin&c=Products&a=del&proid={$rows['proID']}" onclick="return confirm('確定要?jiǎng)h除嗎')">刪除</a></td><td><a href="index.php?p=Admin&c=Products&a=edit&proid={$rows['proID']}">修改</a></td></tr>{/foreach}
來(lái)源:https://www.icode9.com/content-1-795151.html
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
ThinkPHP使用技巧
PHP模板之Smarty安裝與使用入門(mén)教程 | PHP網(wǎng)站開(kāi)發(fā)
smarty模板技術(shù)
php smarty 入門(mén)教程[zz] - 締客論壇
smarty實(shí)例教程
smarty 原來(lái)也不過(guò)如此~~呵呵
更多類(lèi)似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服