Smarty テンプレート エンジン テクノロジー 2、Smarty テンプレート エンジン_PHP チュートリアル

WBOY
リリース: 2016-07-12 08:55:04
オリジナル
892 人が閲覧しました

Smarty テンプレート エンジン テクノロジー 2、Smarty テンプレート エンジン

Smarty テンプレート エンジン テクノロジー

機能: 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組み込み関数*}
{php}
echo date('Y-m-d h:i:s',time());
echo '<br>';
echo "
私はですphp組み込み関数の内容";
{/php}

操作効果:

7. ストリップ組み込み関数

機能: スペースと改行を削除します

サンプルコード:

{ストリップ}
<テーブル>
<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=
"
ステップ =

"1"
    max=
  • "5"
  • }
{

$

arr1[インデックス]}

br>

{

セクション他の

}

<b>):


配列がないか、配列が空です
b>
{/セクション}
二次元配列を走査する
コード例:
Index.php

$arr3 = array(array('name'=>'小明','age'=>25,'sex'=>'未知'),
array('name'=>'
老王','age'=>26,'sex'=>''),
array('name'=>'
老李','age'=>27,'sex'=>'你猜
')
);

Index.tpl

{section loop=$arr3 name="index" }
{$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は各行の色の変更を実現します*}
<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="shi.txt" assign="text"}
{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    输出的文本

9html_radios自定义函数

示例代码:

<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

  • $template_dir        模板目录    默认是:templates
  • $compile_dir        编译目录    默认是:templates_c
  • $config_dir        配置目录    默认:configs
  • $cache_dir        缓存目录    默认:cache
  • $left_delimiter    左定界符    默认:{
  • $right_delimiter    右定界符    默认:}

 

以上变量都有默认行为。

  • $caching キャッシュを有効にするかどうか
  • $cache_lifetime キャッシュのライフサイクル: デフォルト 3600 秒
  • $debugging デバッグ テンプレートをオンにする
  • $php_handling テンプレートにphpを導入することを許可するかどうか

3、一般的に使用される方法

  • assign は変数をテンプレートに渡します
  • assignByRef 変数をテンプレート ファイルに割り当てます (参照渡し)
  • append 変数を追加する

$Smarty->append('var1','シャオミン');
$Smarty->追加( 'var1','25');
$Smarty->append('var1','
男性
);

  • appendByRef は、テンプレートの配列変数に別のデータを追加します (参照によって渡されます)。
  • clearAllAssign テンプレート内のすべての変数をクリアします

$Smarty->clearAllAssign(); //すべてのテンプレート変数をクリアします

  • clearAssign は指定された変数をクリアします

$Smarty->clearAssign('title');

  • clearCache キャッシュをクリアします
  • configLoad 設定の読み込み

$Smarty->configLoad('config.conf','class2');

  • clearConfig 設定内容をクリアします

$Smarty->clearConfig('name');

  • display レンダリングテンプレートの指定

$Smarty->display('index_3.tpl');

テンプレートファイルをロード

レンダリングテンプレート

テンプレートを表示

  • fetch テンプレートをキャプチャしますが、出力しません

テンプレートファイルをロード

テンプレートファイルをレンダリング(タグを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";
}

[追加予定]

  • templateExists は、テンプレート ファイルが存在するかどうかを決定します

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

Smarty缓存相关细节

<code><span><strong>$Smarty<span>->isCached(<span>'index_4.tpl'<span>)</span></span></span></strong>
				</span></code>
ログイン後にコピー

  • 基本语法:isCached(templatesName); 检测模板文件的缓村文件是否存在
  • 参数说明:模板文件名称

<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()第二个参数,来实现,单页面,多缓存。

11、缓存集合

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>
ログイン後にコピー
ログイン後にコピー

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1117386.htmlTechArticleSmarty模板引擎技术二,smarty模板引擎 Smarty模板引擎技术 作用:载入一个php文件,将载入的文件的内容赋值给一个变量   注意:该内建函数...

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート