1

我发现自己为表格数据创建了很多表,并且想创建一个可以根据调用模板中定义的数据结构(而不​​是 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,barbaz. 我可以像这样在模板中使用它们:

<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 的位置foobar我只需要修改模板并将 to 的定义更改datadata [bar, foo; baz]

4

2 回答 2

1
于 2011-12-14T00:07:55.473 回答
0

For a Generic Table Generation: PHPTAL: Repeat Column headers and values

<table>
    <thead>
        <tr>
            <th tal:repeat="r results/0">${repeat/r/key}</th>
        </tr>
    </thead>
    <tbody>
        <tal:block tal:repeat="r results">
        <tr>
           <td tal:repeat="t r">${t}</td>
        </tr>
        </tal:block>
    </tbody>
</table>
于 2013-01-28T18:28:05.503 回答