如何在TAL(PHPTAL)中有条件地添加id属性?

时间:2010-09-17 11:17:57

标签: conditional template-tal phptal

我正在PHPTAL中创建表单元素模板文件。我希望能够OPTIONALLY传递一个字段的id属性...

到目前为止代码看起来像这样:

<xml>
  <tal:block metal:define-macro="text">
    <label tal:condition="php: !isset(hideLabel) || isset(hideLabel) && !hideLabel">${field/label}</label>
    <input name="${name}" type="text" value="${field/value}" />
    <p tal:condition="exists:field/error">${field/error}</p>
  </tal:block>
</xml>

这与宣传的一样。我想补充的是像

这样的东西
<input name="${name}" tal:attributes="id exists: id $id | $name" value="${field/value}" />

允许我选择从METAL调用中传入一个id ...

我应该采用不同的方式吗?我尝试过使用PHP: isset(id) ? $id : NULL及其变体,但最后只得到了结果HTML中的id="0"

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

如果其他人需要,一个有效的答案是:

<xml>
  <tal:block metal:define-macro="text">
    <label tal:condition="not: exists:hideLabel">${field/label}</label>
    <input name="${name}" tal:attributes="id id | nothing" type="text" value="${field/value}" />
    <p tal:condition="exists:field/error">${field/error}</p>
  </tal:block>
</xml>

传递的变量是id,name,名为field的数组和hideLabel。

请注意,我还设法将标签测试简化为我认为更具惯用性的TAL。

答案 1 :(得分:3)

在包含即将使用的元素的DIV中设置VAR:

div class="" tal:define="VAR context.property"
    div class="" tal:attributes="class python:'grid_8 omega' if VAR else 'grid_8 alpha'"

答案 2 :(得分:0)

PHP中的

<div id="contentCenter" tal:attributes="id 

php:isset(variable)&&isset(variable.property)?'IDVALUE':NULL">