Я довольно часто создаю различные таблицы для табличных данных и хотел бы создать макрос, который может динамически создавать таблицы на основе структуры данных, определенной в вызывающем шаблоне (а не в коде 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.
<ч />
Edit:
В качестве примера, скажем, у меня есть произвольные переменные шаблона 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>
И позже, если я захочу поменять местами позиции foo
и bar
, мне нужно всего лишь изменить шаблон и изменить определение data
на data [bar, foo; baz]
.