blocs/blocs: テンプレートエンジン概要とデータ属性一覧
blocs/blocs: テンプレートエンジン概要とデータ属性一覧
BLOCSは、Laravelで利用できるテンプレートエンジンです。HTMLの data-* 属性を使って動的コンテンツを生成し、バリデーション条件もテンプレート側で指定できます。Laravel標準のBladeと併用可能です。このドキュメントでは、BLOCSの全体像とデータ属性の一覧を説明します。
特徴
- data- 属性による動的HTML生成*: 条件分岐、繰り返し、変数表示をHTMLの構造を保ったまま記述
- テンプレートでバリデーション指定: 必須入力や文字数制限などをコントローラーではなくテンプレートで指定
- Bladeとのハイブリッド利用: 必要な部分だけBLOCSを使う柔軟な開発が可能
テンプレートファイルの拡張子
| テンプレートエンジン | 拡張子 |
|---|---|
| Blade | *.blade.php |
| BLOCS | *.blocs.html |
BLOCSのテンプレートは .blocs.html 拡張子で、そのままHTMLとしてブラウザで確認できます。
タグ記法
HTMLタグに data-* 属性を追加して動的に制御する方法です。開始タグにデータ属性を付けることで、タグ全体(開始〜終了)を対象に処理します。
<div class="error" data-exist=$errorMessage data-val=$errorMessage>
errorMessage
</div>
コメント記法
HTMLコメント内にデータ属性を記述する方法です。他のテンプレートの読み込みやタグへの属性追加に使用します。コメント記法で記述した属性は、直後のHTMLタグに適用されます。
<!-- data-attribute="class" data-val="success" data-none=$error -->
<div class="error" data-val=$message>Message</div>
タグ記法とコメント記法を組み合わせた例:
<tr data-loop=$books>
<td><!-- $book->id --></td>
<td><!-- $book->title --></td>
<td>
<span data-loop=$book->tags data-assign=$bookTag>
<!-- $bookTag->name -->
<br>
</span>
</td>
</tr>
注意: 同じ内容をタグ記法とコメント記法で同時に記述することはできません。
データ属性一覧
変数を操作する
| データ属性 | 役割 |
|---|---|
| data-val | 変数の値を表示 |
| data-attribute | 変数の値でHTMLタグの属性を動的に変更 |
| data-assign | 変数に値を代入 |
| data-prefix | 表示する変数の先頭に文字列を追加 |
| data-postfix | 表示する変数の末尾に文字列を追加 |
| data-convert | 変数の表示形式を整形(元の値は変更しない) |
変数でHTMLタグを動的に制御する
| データ属性 | 役割 |
|---|---|
| data-exist | 変数に値がある場合に処理を実行 |
| data-none | 変数に値がない場合に処理を実行 |
| data-if | 指定した条件を満たす場合に処理を実行 |
| data-unless | 指定した条件を満たさない場合に処理を実行 |
| data-loop | 配列の要素数に応じて繰り返し処理 |
| data-repeat | data-loop のエイリアス |
フォーム入力にバリデーション条件を指定する
| データ属性 | 役割 |
|---|---|
| data-form, data-validate | 入力値にバリデーション条件を指定(コメント記法のみ) |
| data-filter | 入力値をバリデーション前に整形(元の値を変更。タグ記法のみ) |
| data-notice / data-lang | 言語ファイルから翻訳文字列を取得(表示・エラーメッセージ等。data-notice のエイリアス。詳しくは No.2.9) |
テンプレートを再利用する
| データ属性 | 役割 |
|---|---|
| data-include | 他のテンプレートやdata-blocで定義されたブロックを読み込み |
| data-bloc | 再利用可能なテンプレート部品(ブロック)を定義 |
コメント記法の終了タグ
| データ属性 | 対応する開始属性 |
|---|---|
| data-endexist | data-exist |
| data-endnone | data-none |
| data-endif | data-if |
| data-endunless | data-unless |
| data-endloop | data-loop |
| data-endrepeat | data-repeat |
| data-endbloc | data-bloc |
エイリアス・内部属性
| データ属性 | 説明 |
|---|---|
| data-repeat / data-endrepeat | data-loop / data-endloop のエイリアス |
| data-lang | data-notice のエイリアス(テンプレート上はどちらも記述可能) |
| data-chdir | include 処理時の作業ディレクトリ切替(主にエンジン内部で使用) |
重要: 上記が BLOCS テンプレートエンジンが解釈する data 属性の一覧です。HTML の標準 data 属性(例: Bootstrap の data-bs-toggle)は別途使用できますが、BLOCS 独自の動的制御用属性は一覧にないものを新規に定義することはできません。
data-notice / data-lang の使い方
data-notice と data-lang は同一属性です(エイリアス)。言語ファイルのキーを指定して翻訳文字列を変数に代入します。フォーム部品と組み合わせてエラーメッセージや案内文をテンプレート側で定義するときに使います(詳しくは No.2.9 を参照)。
<!-- data-notice="template:admin_user_invalid_title" -->
詳細ドキュメント
各データ属性の詳しい使い方は以下を参照してください。
| No. | タイトル |
|---|---|
| 2.2 | 変数の表示(data-val)とメニュー項目の自動変換 |
| 2.3 | 変数の代入(data-assign)と属性値の置換(data-attribute) |
| 2.4 | 条件分岐(data-exist/none/if/unless) |
| 2.5 | 繰り返し処理(data-loop) |
| 2.6 | テンプレートの再利用(data-include / data-bloc) |
| 2.7 | 表示の装飾(data-prefix/postfix)と変換(data-convert) |
| 2.8 | 入力値フィルター(data-filter) |
| 2.9 | 多言語対応(data-lang) |
| 2.10 | バリデーション条件の指定 |
| 2.11 | カスタムバリデーションルールの作成 |
| 2.12 | Auto Include(テンプレート・UIの自動読み込み) |
| 2.13 | 入力インターフェース(ai-* クラス) |
| 2.14 | エラーコード一覧 |
省略記法
| データ属性 | 省略記法 | 記法 | 解説 |
|---|---|---|---|
| data-val=$name | $name | コメント記法 | <!-- $name --> で変数を表示 |
| data-attribute="href" data-val=$url | :href=$url | タグ・コメント | href 属性に値を設定 |
| data-form="name" data-validate="required" | !name="required" | コメント記法のみ | バリデーションを設定 |
| data-assign=$name data-val="値" | $name="値" | コメント記法 | 変数に値を代入 |