ThinkPHP テンプレート使用ガイド
使用例:
{$webTitle|md5|strtoupper|substr=0,3}
コンパイルされた PHP コードは次のとおりです:
関数の定義と使用順序の対応に注意してください。一般に、関数の最初のパラメータは前の変数、または変数が最初のパラメータでない場合は前の関数の結果です。この関数では、位置決め記号を使用する必要があります。例:
{$create_time|date="y-m-d",###}
コンパイルされた PHP は次のとおりです:
使用する関数の数に制限はありませんが、TMPL_DENY_FUNC_LIST を設定して無効な関数のリストを定義することで、テンプレート出力への損傷を防ぐために、システムはデフォルトで exit 関数と echo 関数を無効にすることができます。例:
TMPL_DENY_FUNC_LIST=>"エコー、終了、停止"
複数の関数を区切るには半角カンマを使用します。
?
また、テンプレート変数を渡さずにテンプレート ファイル内で関数を直接呼び出すためのショートカット メソッドも提供します。これには、次の 2 つのメソッドが含まれます。
1. メソッドを実行し、戻り値を出力します:
形式: {:function(…)}
例: U メソッドの戻り値を出力します:
{:U('ユーザー/挿入')}
コンパイルされた PHP コードは
です?
2. 出力なしでメソッドを実行します:
形式: {~function(…)}
たとえば、say_hello 関数を呼び出します。
{~say_hello('ThinkPHP')}
コンパイルされた PHP コードは次のとおりです:
システム変数
テンプレート エンジンは、通常の変数の出力に加えて、システム変数、システム定数、およびシステムの出力もサポートしています。特殊な変数。出力を事前にテンプレート変数に割り当てる必要はありません。システム変数の出力は $Think で始まり、関数の使用をサポートする必要があります。
1. システム変数: サーバー、セッション、ポスト、取得、リクエスト、クッキーを含む
{$Think.server.script_name } // $_SERVER 変数を出力
{$Think.session.session_id|md5 } // $_SESSION 変数を出力します
{$Think.get.pageNumber} // $_GET 変数を出力します
{$Think.cookie.name } // $_COOKIE 変数を出力
$_SERVER、$_ENV、$_POST、$_GET、$_REQUEST、$_SESSION、$_COOKIE 変数の出力をサポートします。次のサーバー、Cookie、および構成では大文字と小文字が区別されませんが、変数では大文字と小文字が区別されます。例:
{$Think.server.script_name} と {$Think.SERVER.script_name} は同等です
SESSION と COOKIE は、次のような 2 次元配列の出力もサポートしています。
{$Think.CONFIG.user.user_name}
{$Think.session.user.user_name}
システムでは3次元を超える配列出力をサポートしていませんので、以下の方法で出力してください。
?
上記のメソッドは次のように書くこともできます:
{$_SERVER.script_name } // $_SERVER 変数を出力します
{$_SESSION.session_id|md5 } // $_SESSION 変数を出力します
{$_GET.pageNumber} // $_GET 変数を出力します
{$_COOKIE.name } // $_COOKIE 変数を出力します
?
2. システム定数: $Think.const を使用して
を出力します。{$Think.const.__SELF__ }
{$Think.const.MODULE_NAME }
または直接使用します
{$Think.__SELF__ }
{$Think.MODULE_NAME }
?
3. 特殊変数: ThinkPHP システムによって内部的に定義された定数
{$Think.version } //バージョン
{$Think.now } //さあ、時間です
{$Think.template|basename} //テンプレート ページ
{$Think.LDELIM } //テンプレートラベルの開始記号
{$Think.RDELIM } //テンプレートタグの終了記号
?
4. 設定パラメータ: プロジェクトの設定パラメータ値を出力します
{$Think.config.db_charset}
出力値は C('db_charset') の戻り結果と同じです。
次のような 2 次元構成パラメータを出力することもできます。
{$Think.config.user.user_name}
?
5. 言語変数: プロジェクトの現在の言語定義値を出力します
{$Think.lang.page_error}
出力値はL('page_error')の戻り結果と同じです。
クイック出力
テンプレート定義をより簡潔にするために、システムは、次のような一般的に使用されるいくつかの変数出力ショートカット タグもサポートしています。
と同等です
{#var} //出力 Cookie 変数は {$Think.cookie.var}と同等です
{&var} //出力構成パラメータは {$Think.config.var}と同等です
{%var} //出力言語変数は {$Think.lang.var}と同等です
{.var} //出力 GET 変数は {$Think.get.var}と同等です
{^var} //出力 POST 変数は {$Think.post.var}と同等です
{*var} //出力定数は {$Think.const.var}
と同等です$_SESSION[‘var1’][‘var2’] の値を出力するなど、2 次元配列を出力する必要がある場合は、次のクイック出力を使用できます。
}方法同様に
{#var1.var2}
$_COOKIE[‘var1’][‘var2’]の値を出力できます。
クイック出力変数は関数の使用をサポートしていないことに注意してください。
したがって、次の使用法は正しくありません:
{#var|strlen}
デフォルト値出力
出力テンプレート変数に値がないが、表示時にデフォルト値を割り当てる必要がある場合は、デフォルト構文の形式を使用できます:
ここでのデフォルトは関数ではなく、システムの文法規則です。例:
{$user.nickname|default="この男は怠け者で何も残さない"}
システム変数の出力では、次のようなデフォルト値もサポートできます。
{$Think.post.name|default="名前が空です"}
クイック出力は関数の使用をサポートしていないため、デフォルト値は HTML 構文をサポートしません。
インクルードファイル
Includeタグを使用して外部テンプレートファイルをインクルードできます。使用方法は次のとおりです:
を含む完全なファイル名を使用します。
形式:例:
この場合、テンプレート ファイル名にはサフィックスが含まれている必要があります。完全なファイル名の包含を使用する場合は、ファイルの包含が URL アドレスを含むのではなく、サーバー側の包含を参照すること、つまり、ファイル パラメーターが相対パスとして書き込まれることに特に注意してください。パスが使用される場合、それはプロジェクトのエントリの場所に基づきます。
?
2. 現在のモジュールを含むその他の操作テンプレート ファイル
形式:
たとえば、現在のモジュールの下に読み取り操作テンプレートをインポートします:
操作テンプレートにはサフィックスは必要ありません。
?
3. 他のモジュールの操作テンプレートが含まれています
形式:
たとえば、Public モジュールを含むヘッダー操作テンプレート:
?
4. 他のテンプレート テーマを含むモジュール操作テンプレート
形式:
たとえば、青色のテーマを含むユーザー モジュールの読み取り操作テンプレート:
?
5. 変数を使用してインポートするテンプレートを制御します
形式:
たとえば
$tplName に異なる値を割り当てると、異なるテンプレート ファイルを含めることができます。変数値の使用方法は上記と同じです。
?
6. ショートカットを使用してファイルを含めます
形式: {include: テンプレート ファイル ルール}
テンプレート ファイル ルールでは、上記の 5 つの方法を使用できます。
注: テンプレート解析の特性により、解析はエントリ テンプレートから開始され、外部テンプレートが変更された場合、キャッシュの有効期限が切れない限り、テンプレート エンジンはテンプレートを再コンパイルしません。付属の外部テンプレート ファイルを変更する場合は、モジュールのキャッシュ ディレクトリをクリアする必要があります。クリアしないと変更が反映されません。
ファイルのインポート
外部 JS および CSS ファイルをインポートする従来の方法は、それらをテンプレート ファイル内で直接使用することです:
?
システムは、上記のインポートを簡素化するための特別なタグを提供します:
最初のインポート メソッドは、ThinkPHP のインポート機能と同様の名前空間メソッドを採用します。例:
Type 属性のデフォルトは js なので、次の効果は同じです:
複数のファイルのバッチインポートもサポートできます。例:
外部 CSS ファイルをインポートする場合は、次のように type 属性の値を指定する必要があります。
上記の方法でのインポートのデフォルトの開始パスは、Web サイトのパブリック ディレクトリです。他のディレクトリを指定する必要がある場合は、次のように、basepath 属性を使用できます。
?
2 番目のタグはロードタグで、ファイルを通じて現在のプロジェクトのパブリック JS または CSS をインポートします
例:
href 属性で特別なテンプレート タグを使用できます。例:
Load タグは type 属性を指定する必要はありません。システムはサフィックスに基づいて自動的に決定します。
システムは、次のような 2 つのタグ エイリアス js と css も提供します。使用法はロードと一致します。
?
さらに、システムは通常のタグを通じて外部の js および css ファイルをロードする方法を提供します。
{ロード: __PUBLIC__/Js/Common.js}
{load: ../Public/Css/common.css}
Volist タグ
Volist タグは主に、テンプレート内のデータ セットまたは多次元配列をループアウトするために使用されます。
まずアクションでテンプレートに値を割り当てます:
$User = M('User');
$list = $User->select();
$this->assign('list',$list);
?
テンプレートは次のように定義されており、ユーザーの番号と名前がループで出力されます:
<ボリスト名="リスト" id="vo">
{$vo.id}
{$vo.name}
ボリスト>
Volist タグの name 属性は、テンプレートによって割り当てられた変数名を表すため、テンプレート ファイル内で自由に変更することはできません。 id は現在のループ変数を表し、任意に指定できますが、name 属性と競合しないように注意してください。例:
<ボリスト名="リスト" id="データ">
{$data.id}
{$data.name}
ボリスト>
5 番目から 15 番目のレコードの出力など、部分的なデータの出力をサポートします
<ボリスト名="リスト" id="vo" オフセット="5" 長さ='10'>
{$vo.name}
ボリスト>
?
偶数番号のレコードを出力
<ボリスト名="list" id="vo" mod="2" >
ボリスト>
Mod 属性は、特定のレコードの行折り返しを制御するためにも使用されます。例:
<ボリスト名="list" id="vo" mod="5" >
{$vo.name}
ボリスト>
?
出力ループ変数
<ボリスト名="list" id="vo" key="k" >
{$k}.{$vo.name}
ボリスト>
key 属性が指定されていない場合、デフォルトでループ変数 i が使用されます。例:
<ボリスト名="リスト" id="vo" >
{$i}.{$vo.name}
ボリスト>
配列のインデックスを出力したい場合は、ループ変数とは異なり、キー変数を直接使用できます。キーはループによって制御されず、データ自体によって決定されます。例:
<ボリスト名="リスト" id="vo" >
{$key}.{$vo.name}
ボリスト>
volist にも iterate というエイリアスがあり、その使用法は volist と同じです。
Foreach タグ
foreach タグはループ出力にも使用されます
{$vo.id}
{$vo.name}
Foreach タグは volist タグよりも比較的簡潔であり、volist タグほど多くの機能はありません。利点は、オブジェクトを走査して出力できることです。通常、配列の出力には volist タグが使用されます。
Switch タグ
テンプレート エンジンは Switch タグをサポートします。形式は次のとおりです:
<スイッチ名="変数" >
<デフォルト />デフォルト
使用方法:
<スイッチ名="User.level">
<デフォルト />デフォルト
name 属性では、関数とシステム変数を使用できます。例:
<スイッチ名="Think.get.userId|abs">
<デフォルト />デフォルト
case の value 属性は複数の条件の判断をサポートし、「|」を使用して区切ることができます。例:
<スイッチ名="Think.get.type">
<デフォルト />その他の形式
は、$_GET["type"] が gif、png、jpg の場合に画像形式と判断することを意味します。
ケースの value 属性に変数を使用することもできます。例:
<デフォルト />デフォルト
変数メソッドを使用する場合、複数の条件の同時判定はサポートされなくなりました。
比較タグ
テンプレート エンジンは、豊富な判定タグを提供します。比較タグの使用法は次のとおりです。
システムでサポートされている比較タグとその意味は次のとおりです:
2当量以上:
と等しい
2 neq または notequal:と等しくありません
2 gt:より大きい
2 例:以上
2 lt:未満
2 elt:以下
2 heq:に等しい定数
2 nheq: 必ずしも等しいとは限りません使い方は基本的に同じですが、違いは判定条件の違いです。
たとえば、name 変数の値が value と等しい必要がある場合は、次を使用できます:
または
は else タグと混合することもできます:
?
name 変数の値が 5 より大きい場合、
を出力します
name変数の値が5以上の場合、
を出力
比較タグ内の変数は、オブジェクトのプロパティや配列、さらにはシステム変数もサポートできます:
例:
voオブジェクト(または配列、または自動判定)の属性が5の場合、
を出力vo オブジェクトの属性が 5 の場合、
を出力します変数での関数の使用もサポートしています
vo オブジェクトの属性値の文字列長が 5 の場合、
を出力します変数名はシステム変数をサポートできます。例:
通常、比較タグの値は文字列または数値です。変数を使用する必要がある場合は、先頭に「$」記号を追加するだけです:
。vo オブジェクトの属性が $a に等しい場合、
を出力しますすべての比較タグは、compare タグを使用できます (実際、すべての比較タグは、compare タグのエイリアスです)。例:
name 変数の値が 5 に等しい場合、
を出力しますtype 属性の値は、上にリストされている比較タグ名です。
Range タグ
Range タグは、変数が特定の範囲 (in、notin、range タグなど) 内にあるかどうかを判断するために使用されます。
in タグを使用すると、テンプレート変数が特定の範囲内にあるかどうかを判断できます。例:
判定が特定の範囲内に収まらなくなった場合は、以下を使用できます:
上記の 2 つのタグを次のようにマージできます:
Value 属性の値には変数を使用できます。例:
変数の値は文字列または配列で範囲判定が可能です。
範囲タグを直接使用して、in と notin の使用を置き換えることもできます。
type 属性の値は in または notin です。
Present タグ
Present タグを使用すると、テンプレート変数に値が割り当てられているかどうかを判断できます。例:
判定が割り当てられていない場合は、以下を使用できます:
上記の 2 つのタグを次のようにマージできます:
空のタグ
空のタグを使用すると、テンプレート変数が空かどうかを確認します。例:
判定が割り当てられていない場合は、以下を使用できます:
上記の 2 つのタグを次のようにマージできます:
定義されたタグ
定義されたタグを使用して、定数が例:
<定義された名前="NAME">NAME 定数はすでに定義されています定義済み>
判断が定義されていない場合は、以下を使用できます:
<未定義の名前="NAME">NAME 定数が定義されていません未定義>
上記の 2 つのタグを次のようにマージできます:
IF タグ
上記のタグがどれも使用できないと思われる場合条件判断を満たす必要に応じて、if タグを使用して次のような複雑な条件判断を定義することもできます。
condition 属性は、上記の比較タグと同じ eq などの判定式をサポートしますが、「>」や「<」などの記号を使用した使用はテンプレートの解析を混乱させるためサポートされていません。次の使用法は間違っています:
条件 = "$id
を次のように変更する必要があります:
さらに、条件属性で php コードを使用できます。例:
条件属性は、ドット構文とオブジェクト構文をサポートできます。例:
ユーザー変数が配列であるかオブジェクトであるかを自動的に判断します
またはユーザー変数がオブジェクトであることを知っておいてください
ifタグのcondition属性は基本的にPHP構文を使用するため、できる限り判定タグやswitchタグを使用した方が簡潔になりますが、原則としてswitchタグや比較タグで解決できる場合は使用しないようにしましょう。 if タグを使用します。スイッチタグと比較タグでは変数修飾子とシステム変数を使用できるためです。 IF タグが依然として特定の特別な要件を満たせない場合は、ネイティブ PHP コードまたは PHP タグを使用してコードを直接記述することができます。
タグのネスト
テンプレート エンジンはタグのマルチレベルのネスト機能をサポートしており、タグ ライブラリ内のタグをネストできるかどうかを指定できます。
システムの組み込みタグのうち、volist (およびそのエイリアス反復)、switch、if、elseif、else、foreach、compare (すべての比較タグを含む)、(not) present、(not) empty、( not) 定義済み タグはネストできます。例:
<ボリスト名="リスト" id="vo">
<ボリスト名="vo['sub']" id="サブ">
{$sub.name}
ボリスト>
ボリスト>
上記のタグは二重ループを出力するために使用できます。
デフォルトのネスト レベルは 3 レベルであるため、さらに多くのレベルが必要な場合は、TAG_NESTED_LEVEL 構成パラメータを指定できます。
PHP コードを使用する
PHP コードはテンプレート ファイル内のタグと混合できます。次の 2 つの方法を含め、任意の PHP ステートメント コードをテンプレート ファイルに記述できます。
2 番目は、元の PHP コードを直接使用する方法です:
ただし、PHP タグや PHP コードではタグ (通常のタグや XML タグを含む) を使用できなくなったため、次のメソッドは無効になります。
Phpタグ内でeqタグが使用されているため無効です
{$user} の通常タグ出力変数は Php タグ内で使用されているため無効です。
$user.name 変数の出力は Php タグで使用されているため、無効です。
つまり、PHP 自体がサポートしていないコードは PHP タグ内で使用できなくなります。
そのまま出力
例:
のように、リテラル タグを使用して、テンプレート タグが解析されないようにすることができます。
リテラル>
上記のifタグはリテラルタグの中に含まれているため、ifタグ内の内容はテンプレートエンジンで解析されず、そのまま出力されます。
JS コード内の特定の使用法がテンプレート エンジンと混同されないように、ページの JS コードの外側でリテラル タグを使用できます。
テンプレートのコメント
このテンプレートはコメント機能をサポートしています。コメントのテキストは最終ページには表示されず、テンプレート作成者による参照と識別のみを目的としています。
形式: {/* コメント内容 */ } または {// コメント内容 }
注: テンプレートのコメントは、ページの表示時には表示されません。テンプレートを作成する際の参考としてのみ使用されます。
{ とコメントタグの間にスペースを入れることはできないことに注意してください。
例:
{// これはテンプレートのコメント内容です }
{/* これはテンプレートです
コメント内容*/ }
テンプレートのコメントは複数行をサポートします。テンプレートコメントはHTMLコメントとは異なり、コンパイルキャッシュファイル生成後に自動的に削除されます。
タグ ライブラリの紹介
先ほど説明したタグの使用法は、組み込みタグ ライブラリまたは組み込みテンプレートの使用法です。実際、組み込みテンプレート エンジンのタグ ライブラリは無限に拡張できます。追加されたタグを展開したら、新しいタグ ライブラリを使用するときは、現在使用しているタグ ライブラリの名前をテンプレートに指定する必要があります。そうしないと、タグの大規模な展開後の解析作業負荷の増加を防ぐために、タグ ライブラリは自動的にインポートされません。今後、tagLib タグを使用してタグ ライブラリをインポートします。
形式:
カンマで区切って複数のタグ ライブラリを同時にインポートできます。
例:
は、HTML タグ ライブラリを現在のテンプレート ファイルに導入する必要があることを示します。タグ ライブラリを導入するには、Html タグ ライブラリの定義ファイルと解析クラス ライブラリが存在することを確認する必要があります (このメソッドを拡張する方法については、前のタグ ライブラリ拡張セクションを参照してください)。 Cx タグ ライブラリにはインポートが組み込まれているため、taglib タグ インポートを使用する必要はありません。
導入後は、HTML タグ ライブラリ内のすべてのタグが現在のテンプレート ページで使用できるようになります。外部からインポートされたタグ ライブラリは、2 つの異なるタグ ライブラリで同じ名前のタグ定義が存在しないように、タグ ライブラリによってプレフィックスが付けられた xml タグを使用する必要があります。たとえば (select タグと link タグが HTML タグ ライブラリで定義されていると仮定します)。 🎜>
タグ ライブラリは使用時に大文字と小文字を区別しないため、次のメソッドも有効です:
?
各テンプレート ページで HTML タグ ライブラリをロードする必要がある場合は、構成を通じて HTML タグ ライブラリを直接プリロードすることもできます。
'TAGLIB_PRE_LOAD' => 'html' ,
プリロードする必要があるタグ ライブラリが複数ある場合は、それらをカンマで区切ります。定義後、各テンプレート ページを直接使用できます:
HTML タグ ライブラリを手動で導入する必要はありません。
?
HTML タグ ライブラリが現在または将来、システムの組み込みタグ ライブラリと同じタグを持たないことが確実であると仮定すると、TAGLIB_BUILD_IN の値を構成して、HTML タグ ライブラリをビルド済みタグ ライブラリとして導入できます。 -in タグ ライブラリ、例:
'TAGLIB_BUILD_IN' => 'cx,html' ,
この方法では、テンプレート ファイル ページに Html タグ ライブラリを導入する必要はなく、HTML タグ ライブラリのタグをプレフィックスなしで直接使用できます。
cx タグ ライブラリはシステムに組み込まれているタグ ライブラリであり、定義を削除できないことに注意してください。
区切り文字を変更する
テンプレート ファイルには、通常のテンプレート タグと XML テンプレート タグを含めることができます。組み込みテンプレート エンジンの通常のテンプレート タグは、デフォルトで開始識別子と終了識別子として { と } が続き、開始タグが続きます。タグの定義中にスペースや改行がある場合は非テンプレートタグとみなされ、そのまま出力されます。
例: {$name} {$vo.name} {$vo['name']|strtoupper} はすべて通常のテンプレート タグです
ユニバーサル テンプレートの開始タグと終了タグを変更するには、次の構成パラメータを使用します:
TMPL_L_DELIM //テンプレートエンジンの通常タグ開始タグ
TMPL_R_DELIM //テンプレートエンジンの通常タグ終了タグ
たとえば、次の構成をプロジェクト構成ファイルに追加します:
'TMPL_L_DELIM'=>'<{',
'TMPL_R_DELIM'=>'}>',
通常のタグの区切り文字が変更されています。元の
{$name} {$vo.name}
必ず使用してください
<{$name}> <{$vo.name}> が有効になります。
?
共通のテンプレート タグは、主にテンプレート変数の出力、テンプレートのコメント、およびパブリック テンプレートの組み込みに使用されます。他の機能を使用したい場合は、XML テンプレート タグを使用してください。ThinkPHP には、XML および TagLib テクノロジに基づくテンプレート タグが含まれており、これには通常のテンプレートの機能が含まれており、さらに重要な点は新しいタグ ライブラリです。テンプレートテクノロジーはより拡張性があります。新しい TagLib タグ ライブラリには名前空間機能があり、ThinkPHP フレームワークには CX タグ ライブラリが組み込まれています。使用しているエディターで XML タグを編集できないと思われる場合は、XML タグ ライブラリの開始タグと終了タグを変更することもできます。次の構成パラメーターを変更してください。
TAGLIB_BEGIN //タグライブラリタグの開始タグTAGLIB_END //タグライブラリタグ終了タグ
たとえば、次の構成をプロジェクト構成ファイルに追加します:
'TAGLIB_BEGIN'=>'[',
'TAGLIB_END'=>']',
オリジナル
を
に変更する必要があります
[eq name="name" value="value"]等しい[else/]等しくない[/eq]?
XML タグと通常のタグの区切り文字が競合してはいけないことに注意してください。競合すると、解析エラーが発生します。
XML テンプレート タグは、テンプレート変数の出力、ファイルのインクルード、テンプレートのコメント、条件制御、ループ出力などの機能に使用でき、機能は自分で完全に拡張できます。