我发现自己为表格数据创建了很多表,并且想创建一个可以根据调用模板中定义的数据结构(而不是 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" />
如何将这些变量构造成行和列的二维数据结构,然后我可以将其输入到生成表的宏中?像这样的东西(注意:这实际上不起作用):
<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>
之后,如果我想交换 and 的位置foo
,bar
我只需要修改模板并将 to 的定义更改data
为data [bar, foo; baz]
。