このテンプレートエンジンには、他のタイプのテンプレートエンジンとは異なるアプローチがあります。 そして、それは興味以外にはできません。
PHPTALのリクエストにより、habrはリンクを 1つだけ提供します。
TALは帰属可能なテンプレート言語です。 言語コマンドはタグ属性であるため、これは呼ばれます。
ネイティブパターンのロジック
ネイティブテンプレートでは、PHPまたは他の言語が基礎として使用され、HTMLはその作業の結果として取得されます。
-
< table > <? foreach ($ myarray as $ myitem ) : ? > < tr >< td ><? =$myitem? ></ td > <? endforeach ;? > </ table >
-
< table > <? foreach ($ myarray as $ myitem ) : ? > < tr >< td ><? =$myitem? ></ td > <? endforeach ;? > </ table >
-
< table > <? foreach ($ myarray as $ myitem ) : ? > < tr >< td ><? =$myitem? ></ td > <? endforeach ;? > </ table >
-
< table > <? foreach ($ myarray as $ myitem ) : ? > < tr >< td ><? =$myitem? ></ td > <? endforeach ;? > </ table >
-
< table > <? foreach ($ myarray as $ myitem ) : ? > < tr >< td ><? =$myitem? ></ td > <? endforeach ;? > </ table >
HTMLは、言語のどこかで失われました。 これはすべて読みにくいです。 検出困難なエラーが生成される場合があります。 たとえば、
- < div > <? php if ($ フラグ ):? >テキスト</ div > <? エンディフ ;? >
ちなみに、smartyはPHPのロジックを変更せず、単純に構文を少し単純化するような配布を得たためです。
ロジックTAL
PHPTALで記述された同じループの例を次に示します
- < 表 >
- < tr tal:repeat = "myitem myarray" >
- < td tal:content = "myitem" >値myitemに置き換えられるテキスト</ td >
- < td tal:replace = "" >例1 </ td >
- < td tal:replace = "" >例2 </ td >
- < td tal:replace = "" >例3 </ td >
- </ tr >
- </ 表 >
*このソースコードは、 ソースコードハイライターで強調表示されました。
その利点:
- このようなテンプレートは、例「例1」、「例2」、「例3」でブラウザに正しく表示されるため、「myarray」の値を取得するために必要なコードが存在しない段階でも、クライアントにそれを示すことができます。
- 非常に簡潔なコード。ネイティブおよびスマートテンプレートを使用するよりもはるかに便利です。
- すべてのコードをテンプレートに直接記述します。たとえば、ブロックテンプレートシステムなど、ロジックを追加したファイルを作成する必要はありません。別の関数を記述し、HTMLに変数を埋め込むだけです。
このアプローチでは、HTMLタグを使用します。 ループ内で複数回繰り返す必要があるタグと、情報を表示するタグを指定します。
TAL名前空間
テンプレートエンジンによって処理される順序:
- tal:define-この属性は、テンプレートで使用できる1つ以上の変数を宣言します。
- tal:condition-タグとそのコンテンツは、条件が満たされた場合にのみ表示されます。
- tal:repeat-この属性は、列挙データのループに使用されます。
- tal:replace-この属性を使用すると、要素全体(開始タグと終了タグを含む)を指定した文字列で置き換えることができます。値が指定されていない場合は空にできます。
- tal:content-この属性の値はタグ内のテキストになります。
- tal:属性-tal:属性を使用して、タグ属性をその場で設定できます。
- tal:省略タグ-この属性により、PHPTALパーサーは要素の開始タグと終了タグを無視し、そのコンテンツのみを表示します。
METAL名前空間(マクロ)
マクロは基本的に、他のパターンに繰り返し挿入できる通常のパターンです。
- metal:define-macro-この属性はマクロを宣言します
- metal:use-macro-この属性はマクロを呼び出し、その実行結果を現在のテンプレートの呼び出された場所に含めます
- metal:define-slot-この属性は、マクロを宣言するタグ内で宣言する必要があります(metal:define-macro)。
- metal:fill-slot-この属性は、metal:use-macroの要素内でのみ使用できます。
マクロ-それらに基づいて、インクルードと継承が実装されます。
PHPTALES
式の構文。 たとえば、属性内にPHPコードを書くことができます
tal:content = "php:strtolower($ value)"
- パス:-デフォルトで使用されます。 例:tal:content = "data / user / name"
- 文字列:-値は文字列として解析されます。 例:tal:replace = "string:これは$$ 100ページです"
- not:-tal:条件でのみ使用
- 存在:-php issetのアナログ()
- php:-php構文
I18N名前空間(内部化)
多言語テンプレートを作成するためのツール
- i18n:translate-この属性は、PHPTALに組み込まれた翻訳システムを使用して翻訳されるテキストを定義します。
- i18n:attributes-翻訳する属性を指定します
- i18n:name-変数の値を翻訳自体に動的にプッシュできます。
PHPTAL拡張
PHPTALを使用すると、プログラマーは
トリガー 、
フィルター 、
phptalesを追加
したり 、オブジェクトを単純に渡したりすることができます。オブジェクトのメソッドはテンプレートで呼び出されます。
ソースリンク: 公式サイト | ドキュメントのロシア語翻訳