PHPテンプレートエンジンsmartyの2番目の組み込み関数

黄舟
リリース: 2023-03-03 16:50:01
オリジナル
1342 人が閲覧しました

Smarty にはいくつかの組み込み関数が付属しています。
組み込み関数はテンプレート言語の一部です。
ユーザーは組み込み関数と同じ名前のカスタム関数を作成したり、組み込み関数を変更したりすることはできません。 Capture 関数、config_load、foreach 、foreachelse、include、include_php およびその他の組み込み関数については、php テンプレート エンジンの Smarty チュートリアル トピックの組み込み関数の 1 つを参照してください) 属性タイプを使用する必要があるかどうか デフォルト値の説明
name string Yes n/a 挿入された関数の名前
assign string No n/a この属性は、挿入される関数の出力を保存する変数を指定します
script string No n/a 関数 PHP を挿入する前に含める必要がありますスクリプト名

[var ...] [var type] いいえ n/a 挿入される関数に渡されるローカルパラメータ

Insert 関数は inluce 関数に似ていますが、違いは、insert に含まれるコンテンツが挿入されないことです。この関数は、テンプレートが呼び出されるたびに再実行されます。たとえば、ページの上部に広告バナーを配置したテンプレートを使用する場合、広告バナーには HTML、画像、したがって、ここでは静的なリンクを使用することはできません。また、広告バナーをキャッシュする必要はありません。これには、#banner_location_id# および #site_id# の値 (設定ファイルから取得) を指定する必要があります。同時に、広告バナーのコンテンツ情報を取得する関数が必要です。

insert 関数のデモ
{* バナー取得の例 *} {insert name="getBanner" hidden=#banner_location_id # sid=#site_id#}

この例では、name 属性として getBanner を使用し、 # Banner_location_id# と #site_id# の 2 つのパラメーターを渡します。 次に、Smarty は PHP プログラム内で insert_getBanner() という名前の関数を検索します。 #banner_location_id# と #site_id# は配列に結合され、関数の最初のパラメーターとしてこの関数に渡されるため、すべての挿入関数は insert_getBanner() 関数で始まる必要があります。渡された引数を実行し、実行結果を返します。これらの結果は、関数が呼び出された時点でテンプレートに表示されます。この例では、Smarty は insert_getBanner(array("lid"=>"12345) のような関数を呼び出します。 ","sid"=>67890"));

assign 属性を設定すると、この属性に対応する変数名が含まれる関数の出力を保存するために使用されます。インクルードする関数の出力が直接表示されないように注意: テンプレート変数に割り当てられた出力情報は、キャッシュされた場合も無効になります。これは、関数を呼び出して実行する前に、この関数が存在しないことを防ぐためです。

スマート オブジェクトは、含める関数では、$this を通じて Smarty オブジェクトの情報にアクセスして変更できます。

技術的なポイント: キャッシュがオンになっている場合、挿入関数はキャッシュされません。キャッシュされたページであっても、ページが呼び出されるたびに動的にロードされます。この機能は、広告バナー、投票、リアルタイムの天気予報、検索結果、フィードバック情報などの分野で広く使用できます。 else

Smarty の if ステートメントは、PHP の if ステートメントと同じくらい柔軟で使いやすく、if は /if 句とペアで使用する必要があります。次の条件修飾子を使用できます: eq、ne、neq、gt、lt、lte、le、gte、ge、iseven、isodd、isnoteven、isnotodd、not、mod、div by、even by、odd by、= =、!=、>、<、<=、>=。これらの修飾子を使用する場合は、変数または定数とスペースで区切る必要があります。

ステートメントのデモ {if $name eq "Fred"}ようこそ、閣下。{ elseif $name eq "Wilma"} ようこそ奥様。{else} ようこそ、どんな方でも。{/if}{* 「or」ロジックの例 *}{if $name eq "Fred" or $name eq " ウィルマ"} ...{/if}{* 上記と同じ *}{if $name == "フレッド" || $name == "ウィルマ"} ...{/if}{*次の構文は機能しません。条件付き修飾子は周囲の要素とスペースで区切る必要があります *}{if $name=="Fred" || $name=="Wilma"} ...{/if}{* 括弧は使用できます * }{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#} ...{/if}{* php 関数呼び出しを埋め込むこともできます *}{if count($var ) gt 0} ...{/if}{* 値が偶数か奇数かをテスト *}{if $var が偶数} ...{/if}{if $var が奇数} ...{/ if}{if $var が奇数でない} ...{/if}{* var が 4 で割り切れるかどうかをテスト *}{if $var is div by 4} ...{/if}{* var が 4 で割り切れるかどうかをテスト偶数、2 でグループ化されます。つまり、0=偶数、1=偶数、2=奇数、3=奇数、4=偶数、5=偶数などです。 *}{if $var が 2 で偶数である場合} ...{/ if}{* 0= 偶数、1= 偶数、2= 偶数、3= 奇数、4= 奇数、5= 奇数など *}{if $var が 3 で偶数である場合} ...{/if}

ldelim、rdelim
ldelim および rdelim は、中括弧「{」と「}」である区切り文字を出力するために使用されます。テンプレート エンジンは常に中括弧内の内容を解釈しようとするため、中括弧を出力する必要がある場合は、このメソッドを使用します。
ldelim、rdelim を使用して、{* これにより、テンプレートからリテラル区切り文字が出力されます *}{ldelim}funcname{rdelim} は、Smarty での関数の外観です。出力結果: {funcname} は、Smarty での関数の外観です!


リテラル
リテラル タグ領域のデータはテキストとして扱われ、テンプレートはその中のすべての文字情報を無視します。この機能は、この情報が {literal. } {/literal} タグの場合、テンプレート エンジンはそれらを分析して直接表示しません。 if (field.value == '')
{ return false; }
else
{
document.loginform.submit();
return true;
}
}
// -->

{/literal}


php

php タグを使用すると、これらのステートメントが処理されるかどうかは、$php_handling の設定によって決まります。通常、このステートメントを使用する必要はありません。もちろん、この機能に精通している場合、または必要だと思われる場合は、 .

php タグのデモ
{php} // テンプレートから php スクリプトを直接含めることもできます // include("/ path/to/display_weather.php"); {/php}

Section,sectionelse

テンプレートのセクションは、配列内のデータを走査するために使用されます。セクション タグはペアで指定する必要があります。名前とループ属性は次のように指定する必要があります。名前は文字、数字、アンダースコアの任意の組み合わせにすることができます。ネストは保証されますが、変数ループ (通常は配列) が必要なループの数を決定します。セクション ループ内で出力する場合、ループ変数に値がない場合は、変数 sectionelse が実行された後に、角括弧で囲まれた name 変数を追加する必要があります。

属性タイプにデフォルト値の説明が必要かどうか
name string はい n/aループの名前

loop [$variable_name] Yes n/a ループの数を決定する変数の名前

start integer No 0 ループ実行の最初の位置 If 値が負の数であり、開始位置。位置は配列の末尾から計算されます。たとえば、配列内に 7 つの要素があり、start を -2 として指定した場合、現在の配列を指すインデックスは 5 になります。不正な値 (下限を超えています)。ループ配列) は、最も近い有効な値に自動的に調整されます。
step integer No 1 この値は、ループのステップ サイズを決定します。たとえば、step=2 を指定すると、添字 0、2、4 などの要素のみがスキャンされます。 step が負の値の場合、配列を後ろから前に走査します。
max integer No 1 ループの最大実行回数を設定します。


セクション 関数を表示するかどうかを決定します。デモ
{* この例では $custid 配列のすべての値を出力します *}
{section name=customer loop=$custid}
id: {$custid[customer]}

{/section}

出力結果:


id: 1000

id: 1001

id: 1002


ループデモ

出力結果:

{* ループ変数はループする回数のみを決定します。セクション内のテンプレートから任意の変数にアクセスできます。この例では、$custid、$name、$address がすべて同じ数の値を含む配列であることを前提としています。 custid[顧客]}
名前: {$name [顧客]}
アドレス: {$address[顧客]}

{/section}出力結果: id: 1000名前: ジョン スミス
住所: 253 N 45th

id: 1001
名前: ジャック ジョーンズ&​​lt;br>住所: 417 Mulberry ln

id: 1002
名前: ジェーン マンソン
住所: 5605 apple st

セクション名演示 {* セクションの名前は好きなものにすることができます。
セクション内のデータを参照するために使用されます *}
{section name=mydataloop=$custid}
id: {$custid[mydata ]}

名前: {$name[mydata]}

アドレス: {$address[mydata]}


{/section}
嵌套セクション 演示 { * セクションは好きなだけネストできます。ネストされたセクションを使用すると、多次元配列などの複雑なデータ構造にアクセスできます。この例では、$contact_type[customer] は現在の顧客の連絡先タイプの配列です。 *}{セクション名=顧客ループ=$custid} ID: {$custid[顧客]}
名前: {$name[顧客]}
住所: {$address[顧客]}
{セクション名=連絡先ループ=$contact_type[顧客]} {$contact_type[顧客][連絡先]}: {$contact_info[顧客][連絡先]}
{/section}

{/section}出力結果:id: 1000
名前: John Smith
住所: 253 N 45th
自宅の電話: 555-555-5555
携帯電話: 555-555-5555
電子メール: john@mydomain.com
id: 1001
名前: Jack Jones
住所: 417 Mulberry ln
自宅電話: 555- 555-5555
携帯電話: 555-555-5555
電子メール: jack@mydomain.com
id: 1002
名前: Jane Munson
住所: 5605 apple自宅の電話: 555-555-5555
携帯電話: 555-555-5555
電子メール: jane@mydomain.com

 
セクション遍历多维数组演示 {* これはセクション内のデータの連想配列
を出力する例です *}
{セクション名=顧客ループ=$contacts}
名: {$contacts[顧客].name}< br>
ホーム: {$contacts[顧客].home}

携帯: {$contacts[顧客].cell}

電子メール: {$contacts[顧客].email}< p>
{/section}


出結果:

名前: John Smith

自宅: 555-555-5555

携帯: 555-555-5555

電子メール: ジョン@mydomain.com


名前: Jack Jones

自宅の電話: 555-555-5555

携帯電話: 555-555-5555

電子メール: jack@mydomain.com< p>
名前: Jane Munson

自宅の電話: 555-555-5555

携帯電話: 555-555-5555

電子メール: jane@mydomain.com

 
sectionelse 演示 {* $custid 値がない場合、sectionelse が実行されます *}
{section name=customer loop=$custid}
id: {$custid[customer]}

{sectionelse}
ありません$custid.
{/section}

セクションの値 循環にも提供可能な变量名があります。 过如下方式调用{$smarty.section.sectionname.varname}.

strip
Web 开公開者多次遭遇空格和回车影响HTML输出的情形(浏览器の「特性」), 特定の結果を得るために、したがって、モール板内のすべてのチェックを実行することはできません。 通常、この問題は理解または処理されるモジュールで発生します。

Smarty は、表示前に削除区のいずれかに位置する {strip}{/strip} 标记中のデータの首尾空格と回车を行います。 これにより、モジュールパネルが容易に理解でき、余分な空格を負担せずに済みます。
strip 标签演示 {* 以下は出力時にすべて 1 行にまとめられます *}
{strip}





   これはテストです


{/strip}


出結果:

{strip}





   これはテストです


{/strip}


出結果:

上記の例では、すべての行が HTML タグで始まり、終わっていることに注意してください。行の先頭と末尾にテキストがある場合、それらもまとめられて実行されます。結果

上記は、PHP テンプレート エンジン Smarty の 2 番目の組み込み関数の内容です。詳細については、PHP 中国語 Web サイト (www.php.cn) を参照してください。 )!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!