首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHPTAL动态表生成

PHPTAL动态表生成
EN

Stack Overflow用户
提问于 2011-12-13 14:52:08
回答 2查看 817关注 0票数 1

我发现自己为表格数据创建了很多表,并且希望创建一个宏,该宏可以基于调用模板(而不是PHP代码)中定义的数据结构动态创建表。下面是一个简单的例子:

代码语言:javascript
复制
<!-- 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" />

我要寻找的是如何从PHPTAL本身中定义data (一个数组结构)。我不能将其定义为PHP中的模板变量的原因(例如。$tpl->data = array(...))是因为数据的顺序和布局属于模板。因此,例如,如果我想翻转表的X和Y轴,我只需要修改模板,而不是PHP代码。

编辑:

举个例子,假设我有任意的模板变量foobarbaz。我可以在模板中使用这些内容如下:

代码语言:javascript
复制
<span tal:content="foo" /><br />
<span tal:content="bar" /><br />
<span tal:content="baz" />

如何将这些变量构造为行和列的二维数据结构,然后将其输入生成表的宏中?类似的事情(注意:这实际上不起作用):

代码语言:javascript
复制
<tal:block tal:define="data [foo, bar; baz]" metal:use-macro="table" />

其中,宏的期望输出为:

代码语言:javascript
复制
<table>
    <tr>
        <td>foo</td>
        <td>bar</td>
    </tr>
    <tr>
        <td>baz</td>
    </tr>
</table>

然后,如果我想交换foobar的位置,我只需要修改模板并将data的定义更改为data [bar, foo; baz]

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-14 00:07:55

您可能应该使用助手方法,例如,php:transpose_table(input_data)或将其包装在TALES函数中:

代码语言:javascript
复制
function phptal_tales_transposed($expr, $nothrow) {
    return 'transpose_table(' . phptal_tales($expr, $nothrow) . ')';
}


<tal:block tal:define="data transposed:input_data" metal:use-macro="table" />

PHPTAL本身的换位或排序将不必要地复杂(PHPTAL不是XSLT :)

回答编辑:)

如果要将多个变量组合到数组中,请使用:

代码语言:javascript
复制
<tal:block tal:define="data php:array(foo, bar, baz)" metal:use-macro="table" />

如果您想要有一定数量的列,array_chunk()函数可能很有用。

如果您喜欢自定义语法,那么编写phptal_tales_…函数将您的[…]语法转换为PHP代码。

票数 1
EN

Stack Overflow用户

发布于 2013-01-28 18:28:05

对于泛型表生成: PHPTAL:重复列标题和值

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8491187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档