いくつかの事実を引用します。
- これは、Habréが使用するテンプレートエンジンです。
- このテンプレートエンジンは、負荷の高いプロジェクトで使用され、Cで記述され、PHP拡張機能として接続されています。
- その速度はphp自体に匹敵します(カットの下のベンチマーク)。
- テンプレートにはアプリケーションロジックがなく、ループや分岐などがないため、レイアウト設計者は満足します。
- 著者の一人は、アレクセイ・ライバック漁師です。
Blitzは、Smartyなどと根本的に異なるブロックテンプレートエンジンです。
Blitzと比較したSmartyはプログラミング言語です。
Blitzテンプレートの構文は、3つの構成要素に基づいています。
- ブロック(コンテキストです):{{BEGIN blockName}}ブロックの内容{{END}}
- 変数:{{$ var}}
- 関数呼び出し{{myFunc($ params)}}
ループ、条件ステートメント、およびその他の豊富な構文がありません。 これにより、ロジックの分離が保証されます。
プレゼンテーションロジックからのアプリケーション。 その結果、テンプレートはプロジェクトの成長に混乱することはありません。
コード編成の観点から、ビュー(MVC)コンポーネントは2つの部分に分けることができます。
- テンプレート (Blitzタグ付きのHTMLファイル);
- テンプレートコントローラー -これは、テンプレートの処理を制御するBlitzオブジェクトです(Webアプリケーションコントローラーと混同しないでください)。
テンプレートコントローラーは、プログラマーが多く処理できるテンプレートのすべての冗長ロジックを搭載しています
タイプセッターよりも効果的です。
いくつかの例:
1.伝統により:こんにちは、世界!
テンプレートtemplate.tpl:
こんにちは、{{$ name}}!
スクリプト:
$ template = new Blitz( 'template.tpl'); echo $ template-> parse(array( 'name' => 'world'));
2.テンプレートはファイルからだけでなくダウンロードできます。
Blitzを試すには、ダウンロードできます
変数からスクリプトコードで直接テンプレート:
$ template = new Blitz(); $ template-> load( 'Hello、{{$ name}}!'); echo $ template-> parse(array( 'name' => 'world'));
3.ブロック(コンテキスト):
ブロックは、必要に応じて表示できるテンプレートの一部です。
こんにちは{{BEGINブロック}} {{$ name}} {{END}}
デフォルトでは、このテンプレートには文字列「hello」が表示され、ブロックは非表示になります。
次のコードは、ブロックを1回印刷します。
$ template = new Blitz( 'some.tpl'); $ template-> block( '/ block'、array( 'name' => 'Dude')); echo $ template-> parse();
結果
「こんにちは」。
ブロックの同義語はコンテキストです。 ブロックの出力は反復と呼ばれます。
明確にするために、ENDステートメントの後にブロックの名前を指定できます。
{{ENDブロック}}。
4.出力を数回ブロックします(リストまたはループ):
各ブロックを数回「反復」して、リスト(Smartyのサイクルのアナログ)、テンプレートコントローラーコードを表示できます。
foreach(array( 'Dude'、 'Sobchak'、 'Donny')as $ i_name){ $ template-> block( '/ block'、array( 'name' => $ i_name); }
前の例のテンプレートに対してこのコードを実行すると、次のことがわかります。
「こんにちは、Donny Sobchak」
5.用語
次に、同じリストをコンマで区切って表示してみましょう。
これを行うには、ブロックまたはifステートメントを使用する2つの方法があります。
まず、ブロックを使用します。
こんにちは{{BEGINブロック}} {{BEGINカンマ}}、{{END}} {{$ name}} {{END}}
ループで繰り返します:
$ need_comma = FALSE; foreach(array( 'Dude'、 'Sobchak'、 'Donny')as $ i_name){ if($ need_comma){ $ template-> block( '/ block /カンマ'); } else { $ need_comma = TRUE; } $ template-> block( '/ block'、array( 'name' => $ i_name); }
私にとっては、あまりエレガントではありません。 このような単純なケースでは、ifステートメントを使用する方が適切です。
こんにちは{{BEGINブロック}} {{if($ _ first、 ''、 '、')}} {{$ name}} {{END}}。
Blitzには、ブロックの定義済み変数があります: $ _first (最初の反復)、
$ _last (最後の反復)、 $ _total (総数)、 $ _num 、 $ _even 、 $ _odd 。
名前は、目的について簡単に推測できます。 定義することもできます
テンプレートコントローラーからの変数。
例としてさらに2つ:
{{if(TRUE、 '2 + 2 = 4'、 '2 + 2 = 5'); }} {{if($ a、 "b"、$ c); }}
6.コンテキストと反復の使用
ブロックの代わりに、3つの低レベルメソッドの組み合わせを使用できます。
コンテキスト 、 設定および反復 。 コンテキストメソッドは、1つのパラメーター(完全または相対)を取ります
パス、それ以降のすべてのセットおよび相対パスは、デフォルトでこのパスを使用します。
$ template-> context( '/ block'); foreach(array( 'Dude'、 'Sobchak'、 'Donny')as $ i_name){ $ template-> iterate(); $ template-> set(array( 'name' => $ i_name)); }
コンテキストメソッドは、cd consoleコマンドのように機能します。
反復メソッドはブロックを「表示」します。
ブロックの使用は簡単ですが、多くの場合、必要になります
コンテキストと反復を伴う低レベル操作。
7.すべては反復です
テンプレートの各状態は、特定のデータ構造によって記述できます。
前の例に次のコードを追加した場合:
$ data = $ template-> getIterations();
$データの構造は次のとおりです。
配列( 0 =>配列( 'block' =>配列( 0 =>配列( 'name' => 'Dude')、 1 =>配列( 'name' => 'Sobchak')、 2 =>配列( 'name' => 'Donny') ) )、 )
これは、 解析メソッドを呼び出す前のテンプレートの内部状態です。
block 、 set 、 iterate 、 contextメソッドを使用してテンプレートをどうするか-
Blitzはこの配列を変更します。 解析メソッドが呼び出されたとき-ブリッツレンダリング
この構造に基づいたテンプレート。
さまざまな課題を実践し、ダンプで何が起こるかを確認して、迅速なデバッグを実現
あなたのコード。
8.すべて同じで、配列を通して:
$データ=配列( 0 =>配列( 'block' =>配列( 0 =>配列( 'name' => 'Dude')、 1 =>配列( 'name' => 'Sobchak')、 2 =>配列( 'name' => 'Donny') ) )、 ); $ template = new Blitz( 'some.tpl'); echo $ template-> parse($ data);
some.tpl:
{{BEGINブロック}} {{if($ _ first、 ''、 '、')}} {{$ name}} {{END}}
前の例と同じ結果ですが、
ブロック/コンテキスト/反復メソッドを使用せずに。
9.ネストされた反復
$データ=配列( 配列( 'who' => 'soldiers'、 'what' =>配列( 0 =>配列( '動詞' => 'going'、 'details' =>配列( 0 =>配列( 'item' => 'nowhere')、 ) )、 1 =>配列( 「動詞」=>「盲目」、 'details' =>配列( 0 =>配列( 'item' => 'by')、 1 =>配列( 'item' => 'their')、 2 =>配列( 'item' => 'faith') ) ) ) ) ); $ template = new Blitz(); $ template-> load( '{{$ who}} {{BEGIN what}} {{$ verb}} {{BEGIN details}} {{$ item}} {{END}} {{END}}'); $ template-> set($ data); echo $ template-> parse();
実行結果:
信仰によって盲目にされない兵士
それがどのように機能するかを理解すれば、あなたは完全に認識しています。
コンテキストと反復。
10.テンプレートの一部を操作できます
テンプレート全体に関係なく、テンプレートの一部(ブロック)を使用すると便利な場合があります。
これは、 fetchメソッドを使用して実行できます。
some.tpl:
{{BEGIN hello}}こんにちは、{{$ name}} {{END}} {{BEGIN bye}}さようなら、{{$ name}} {{END}}
コード:
echo $ template-> fetch( '/ hello'、array( 'name' => 'Lena')); //こんにちは、レナ echo $ template-> fetch( '/ bye'、array( 'name' => 'Sveta')); //さようなら、Sveta
11.テンプレート内の関数呼び出し:
次のコード
{{my_test($ a、 "foo"、 'bar'、TRUE、2005); }}意味する
パラメーターを指定してmy_testメソッドを呼び出すもの。
次のようにmy_test関数を追加します。
クラスビューはBlitzを拡張します{ 関数my_test($ a){ return '(user method called(' .__ CLASS __。 '、' .__ LINE__。 ')、a ='。$ a; } } $ template = new View(); $ template-> load( 'user method call test:{{my_test( "test")}}'); echo $ template-> parse();
結果:
ユーザーメソッド呼び出しテスト:ユーザーメソッド呼び出し(blitztemplate、5)、a =テスト
結論として:
この概要は、 Quck Geek Blitz Tutorialチュートリアルの無料翻訳として書かれています。
詳細については、このテンプレートエンジンの使用の基本のみを示しています
ドキュメントを参照する価値があります 。
参照資料
BlitzプロジェクトのWebサイト: alexeyrybak.com/blitz/blitz_ru.html
テンプレートとベンチマークの例: alexeyrybak.com/blitz/lebowski_bench.tar.gz