機能: PHP ファイルをロードし、ロードされたファイルの内容を変数に代入します
注: この組み込み関数は 2.0 でのみ使用できます。使用する場合は、SmartyBC.class.php をインスタンス化する必要があります。
サンプルコード:
Index.php
include 'Smarty/SmartyBC.class.php';
//インスタンス化Smartyクラス
$スマーティ = 新しいSmartyBC();
$Smarty->assign('名前','シャオミン');
$S ->表示 ('index.tpl');
index.tpl
りー
機能:Smartyの内蔵機能が足りない場合、内蔵機能を挿入することで機能を拡張できます。
基本構文:index.phpファイルを作成する
insert_カスタム関数名($arg){
echo $arg[[テンプレートで定義されている変数]
}
Index.tpl ファイル
{名前を挿入=カスタム関数名カスタムパラメータ… }
サンプルコード:
Index.php
関数insert_func($arg){
echo $arg['title'];
}
function insert_date($arg){
エコー $arg['say']." 今日は天気も良くて、今がその時です ".日付('Y-m-d H:i:s',時間());
エコー
'
';
エコー
$arg['zhangsan'].「今日はいい天気ですね。今がその時間です 「.デート」 ('Y-m-d H:i:s',time());}
index.tpl テンプレート
{insert name="func" title='PHPは世界で最高の言語です'} <時間
>{挿入
name=「日付」say='ラオ・ワンは言いました:' 'ははは: '}
サンプルコード:
{if $年齢 >= 18}
この人は未成年者ではありません
{elseif $age == '14'}
この人14歳
{else}
この人は未成年です
{/if}
サンプルコード:
<b>Smartyでは{ldelim}if{ rdelim} 条件判定を行うb> 機能: このタグ内のコンテンツは、Smarty テンプレート エンジンによって解析されません。 サンプルコード:
{文字通り}
{*
こんにちは、私はアノテーターです*} {assign var='age' value="14"}{/literal
}
操作効果:
サンプルコード:
{*PHP組み込み関数*}
{php}
echo date('Y-m-d h:i:s',time());
echo '<br>';
echo "私はですphp組み込み関数の内容";
{/php}
操作効果:
機能: スペースと改行を削除します
サンプルコード:
{ストリップ}
<テーブル>
<tr>
<td>1td>
td > d >
使用前に:
使用後:
8、section、sectionelse組み込み関数(
二次元配列、)
関数: 配列を走査する
基本的な使い方:
{
セクションloop=
$arr name=
"index"} {$
arr[index]}<
brパラメータの詳細な説明: ループは配列を走査する必要があります
現在のループのインデックスに名前を付けます
拡張使用1: 開始ステップ最大値を使用
{セクション
loop=$arr1 name="index"
start="0" step="1" max="5"} {$arr1[インデックス]}
<br>{/セクション}
パラメータの詳細な説明: start ループの開始インデックス
毎回のSTEP増加ループ数
最大。
拡張使用 2: セクション別
機能: ループされた配列が空かどうかを判断し、空の場合は次の内容を実行します。
コード例:
{*セクション組み込み関数*}{loop=$arr1 name="index" start=" ステップ =
$
arr1[インデックス]}br>
{
セクション他の
}
<b>): $arr3 = array(array('name'=>'小明','age'=>25,'sex'=>'未知'), Index.tpl
{section loop=$arr3 name="index" }
配列がないか、配列が空です
b>
{/セクション}
二次元配列を走査する
コード例:
Index.php
array('name'=>'老王','age'=>26,'sex'=>'男'),
array('name'=>'老李','age'=>27,'sex'=>'你猜')
);
{$arr3[index]['name']} |
{$arr3[index]['age']} |
{$arr3[index]['sex']} |
<hr/>
{/section}
运行效果:
拓展内容:
<code><span><strong>当前索引: <span><span>{<span>$<span>smarty.section.index.index} <span>->><br/></span></span></span></span>当前索引的前一个:<span>{<span>$<span>smarty.section.index.index_prev}<span>->><br/></span></span></span></span>当前索引的下一个:<span>{<span>$<span>smarty.section.index.index_next}<span>->><br/></span></span></span></span>当前所循环的次数<span> <span><span>{<span>$<span>smarty.section.index.iteration}<span>->><br/></span></span></span></span>判断当前是否第一次<span><span>: <span>{<span>$<span>smarty.section.index.first}<span>->><br/></span></span></span></span></span>判断当前是否最后一次:<span>{<span>$<span>smarty.section.index.last}<span>->> </span></span></span></span></span></span></span></span></strong></span></code>
循环的总次数:{$smarty.section.index.total}->>
运行效果:
示例代码:
{counter start='10' }
<hr>
{counter}
<hr>
{counter print=false}
<hr>
{counter skip=2}
<hr>
{counter}
<hr>
运行效果:
基本语法:{cycle values=参数1,参数2,参数3}
示例代码:
{*cycleは各行の色の変更を実現します*} {fetch file="shi.txt" assign="text"} 运行效果:
<hr>
<tablewidth="100%" >
&lt;trtyle= "background-color:{cyclevalues=" red、緑、黄色 "}"&gt;&lt;
私の{カウンターstart='1' ip='1' } cyclestd> tr> <tr style="background-color: {cycle s= "赤、緑、黄色"
}">
<td>
私の { カウンター}タイムループtd> tr> <tr style = "背景色: {cycle values="red,green, yellow"}"
> <td
>
私の {カウンター}タイムループtd> tr> < tr style= "背景色: {cycle values="red,green, yellow"}"
> <td
>
私の{カウンター}ループtd > tr>
私の
{カウンター} ループ td> tr> <tr style="背景色: {cycle values="red,green, yellow"}"> <td; >
私の
{カウンター}回ループ< /td> tr>テーブル>
{デバッグ}
操作効果:
機能: ファイルの内容をキャプチャし、変数に代入します。
サンプルコード:
{fetch file="date.php" assign="php"}
{*变量调节器
{$text|变量调节器名称:参数1:参数2}
*}
{$php}
<hr>
{$text|nl2br}
<code><span><strong>{<span>html_image <span>file=<span>"1.jpg"<span>}</span></span></span></span></strong>
</span></code>
参数:file 图片资源的路径
运行效果:
作用:生成一个表格,将数据遍历进去
示例代码:
{html_table loop=$arr cols="3"}
参数说明:loop 要循环遍历的数组
Cols 指定表格列数
作用:生成一组多选框
示例代码:
{html_checkboxes name = 'job'
values = $arr
checked = $arr2
output = $arr3
separator = "|"
}
参数说明: name 对应多选框中的name属性
Values 对应多选框中你的value属性
Checked 选中指定的多选框
Output 控制文本内容
Separator 连接符
运行效果:
{待补充}
示例代码:
<code><span><strong><<span>select <span>style=<span>"<span>width: <span>100<span>%;<span>"<span>><br/> <span>{<span>html_options <span>values = <span>$<span>arr<br/> selected = <span>'GO'<br/> <span>output = <span>$<span>arr3<br/> }<br/><span></<span>select<span>></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></strong><span> </span></span></code>
参数说明:values 下拉框选项的值
Selected 指定被选中的下拉选项,注意:必须和value的值对应
Output 输出的文本
示例代码:
<code><span><strong>{<span>html_radios <span>values = <span>$<span>arr<br/> checked = <span>'nodejs'<br/> <span>output = <span>$<span>arr3<br/> separator = <span>"|"<br/><span>}</span></span></span></span></span></span></span></span></span></span></strong> </span></code>
参数说明:values 单选框的值
Checked 指定默认被选中的单选框
Output 输出的文本
Separator 连接符
运行效果:
{待补充}
实例代码:
{section loop=$arr4 name="index" }
{html_image file="./img/{$arr4[index]}.jpg"}
<hr>
{/section}
SMARTY_DIR
以上变量都有默认行为。
$Smarty->append('var1','シャオミン');
$Smarty->追加( 'var1','25');
$Smarty->append('var1',' 男性 );
$Smarty->clearAllAssign(); //すべてのテンプレート変数をクリアします
$Smarty->clearAssign('title');
$Smarty->configLoad('config.conf','class2');
$Smarty->clearConfig('name');
$Smarty->display('index_3.tpl');
テンプレートファイルをロード
レンダリングテンプレート
テンプレートを表示
テンプレートファイルをロード
テンプレートファイルをレンダリング(タグをPHPコードに置き換える)
フェッチを通じて静的テクノロジーを実装できます。
Index_3.php ファイル
/*
* 静的ファイルがある場合は静的ファイルを読み込み、静的ファイルがない場合は静的ファイルを生成します。
* */
if(!is_file('./html/index_3.html')){
$html = $Smarty->fetch('index_3.tpl');
file_put_contents('./html/index_3.html',$html);
echo 'ここには静的ファイルはありません';
include "./html/index_3.html";
}else{
echo 'ここに静的ファイルがあります';
インクルード"./html/index_3.html";
}
[追加予定]
if($Smarty->templateExists('index_4.tpl')){
$Smarty->display('index_3.tpl');
}else{
エコー'貂蝉、テンプレートファイルがありません~';
}
追加: Smarty テンプレートで 配列、オブジェクトを読み取る方法。
{*多维数组*}
{$var[0]['name']}
{*一位数组*}
{$var['name']}
{*获取对象属性*}
{$std->name}
<hr>
{*获取对方法*}
{$person->speak()}
Index3.php文件
$std
= new StdClass();
class person{
function __construct(){}
function speak(){
echo '你猜猜我谁?';
}
}
$person = new person();
$std->name = '张二明';
概念:一般在我们项目中,有一部分数据并不是实时更新的,但是,有又必须实时访问。如果不使用缓存技术的话,每访问一次,得查询一次或者多次数据库,那么会给数据造成很高的I/O开销。会增加服务器的压力。
用户端缓存原理:
服务器缓存原理:
//开启缓存
$Smarty->caching = true;
//设置缓存文件的生命周期
$Smarty->cache_lifetime = '7200';
缓存文件由编译文件而来。
编译文的内容何时变化?
思路:设置一个生命周期只有30秒的缓存文件,定义一个变量,在模板中使用该变量。然后打开index.php.
然后修改该变量的值。等待。。。30
<code><span><strong>$Smarty<span>->isCached(<span>'index_4.tpl'<span>)</span></span></span></strong> </span></code>
<code><span><span><strong><em>//</em></strong></span><span><strong><em>清除所有缓存<br/><span><span>$<span>Smarty->clearAllCache();<br/><span>//</span></span></span><span>清楚某模板缓存文件<br/></span></span></em><span>$Smarty<span>->clearCache(<span>'index_4.tpl'<span>);</span></span></span></span></strong> </span></span></code>
在Smarty的缓村是全局缓存,如果开启缓存,访问整个页面的数据都会被缓存,如果页面中有一些动态数据需要修改,如何处理?
如何处理页面中动态显示的数据部分呢?
<code><span><strong><span>$Smarty<span>->assign(<span>'shige'<span>,<span>'</span></span></span></span></span>《再别康桥》<span>'<span>,<span>true<span>);</span></span></span></span></strong> </span></code>
<code><span><strong>{<span>nocache<span>}<br/> {<span>$<span>title}<br/>{/<span>nocache<span>}</span></span></span></span></span></span></strong> </span></code>
如何解决一个模板文件,动态显示不同的内容。
实际场景:譬如一个电商网站的商品详细页,会动态的根据URL上的参数,改变该页面的内容。
那么这种情况如何实现缓存呢?
http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=1
http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=2
http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=3
http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=250
在Smarty中,我们通过设置display()第二个参数,来实现,单页面,多缓存。
http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=1&cate_id=15
http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=1&cate_id=15
http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=1&cate_id=15
http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=1&cate_id=15
我们通过给display()方法设置第二个参数实现缓存集合(通过|分割)
<code><span><span><strong>$Smarty</strong></span><span><strong>->display(<span>'index_5.tpl'<span>,<span>$_GET<span>[<span>'goods_id'<span>].<span>'|'<span>.<span>$_GET<span>[<span>'cate_id'<span>]);</span></span></span></span></span></span></span></span></span></span></span></span></strong> </span></span></code>
示例代码:
<code><span><strong><span>//</span><span>定义一个函数用于字符串替换</span><span> </span></strong></span></code>
<code><span><strong><span>function <span>check<span>(<span>$tpl_output<span>, <span>$smarty<span>){<br/> <span>$tpl_output <span>= <em>str_replace</em>(<span>'</span></span></span></span></span></span></span></span></span></span>苍井空<span><span>'<span>,<span>'</span></span></span>张某某<span>'<span>,<span>$tpl_output<span>);<br/> <span>return <span>$tpl_output<span>;<br/>} </span></span></span></span></span></span></span></span></strong></span></code>
<code><span><strong><span>//</span><span>通过注册过滤器,实现模板中的字符串过滤</span></strong><span><strong><br/><span>$Smarty<span>->registerFilter(<span>"output"<span>,<span>"check"<span>);</span></span></span></span></span></span></strong> </span></span></code>
通过模板继承实现页面精细化拆分
示例代码:
Parent.tpl文件
<code><span><span><strong>{<span>extends <span>file=<span>"parent.tpl"<span>}<br/>{<span>block <span>name=<span>'content'<span>}<br/> </span></span></span></span></span></span></span></span></strong></span><span><strong>偶哈呦,哈哈哈哈<br/> <span><<span>hr<span>><br/><span>{/<span>block<span>}</span></span></span></span></span></span></strong> </span></span></code>
Child.tpl文件
<code><span><span><strong>{<span>extends <span>file=<span>"parent.tpl"<span>}<br/>{<span>block <span>name=<span>'content'<span>}<br/> </span></span></span></span></span></span></span></span></strong></span><span><strong>偶哈呦,哈哈哈哈<br/> <span><<span>hr<span>><br/><span>{/<span>block<span>}</span></span></span></span></span></span></strong> </span></span></code>