私は表形式のデータ用にさまざまなテーブルをかなり作成していることに気づき、(PHP コードではなく) 呼び出し元のテンプレートで定義されたデータ構造に基づいてテーブルを動的に作成できるマクロを作成したいと考えています。簡単な例を次に示します。
<!-- Define the macro -->
<tal:block metal:define-macro="table">
<table>
<tr tal:repeat="row data">
<td tal:repeat="col row" tal:content="col" />
</tr>
</table>
</tal:block>
<!-- Use the macro -->
<tal:block tal:define="data ???" metal:use-macro="table" />
私が探しているのは、data
PHPTAL 自体から (配列構造を) 定義する方法です。これを PHP でテンプレート変数として定義できない理由 (例$tpl->data = array(...)
) は、データの順序とレイアウトがテンプレートに属しているためです。たとえば、テーブルの X 軸と Y 軸を反転させたい場合、PHP コードではなく、テンプレートを変更するだけで済みます。
編集:
例を挙げると、任意のテンプレート変数foo
、bar
、および があるとしbaz
ます。これらをテンプレートで次のように使用できます。
<span tal:content="foo" /><br />
<span tal:content="bar" /><br />
<span tal:content="baz" />
これらの変数を行と列の 2 次元データ構造に構築し、テーブル生成マクロに入力するにはどうすればよいですか? このようなもの(注:これは実際には機能しません):
<tal:block tal:define="data [foo, bar; baz]" metal:use-macro="table" />
マクロからの目的の出力は次のとおりです。
<table>
<tr>
<td>foo</td>
<td>bar</td>
</tr>
<tr>
<td>baz</td>
</tr>
</table>
後で、 と の位置を交換しfoo
たいbar
場合は、テンプレートを変更して の定義を に変更するだけで済みdata
ますdata [bar, foo; baz]
。