Blitzドキュメントから:非常に大規模なインターネットプロジェクト向けの非常に高速で強力なテンプレートエンジン。
いくつかの事実を引用します。
- これは、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