1

给定一个看起来像这样的金属宏:

<tal:block metal:define-macro="foo">
    <option value="1">Foo</option>
    <option value="2">Bar</option>
    <option value="3">Baz</option>
</tal:block>

还有一个使用如下宏的模板:

<select>
    <tal:block tal:define="selectedValue 2" metal:use-macro="foo" />
</select>

我需要向宏添加什么,以使生成的 HTML 如下所示:

<select>
    <option value="1">Foo</option>
    <option value="2" selected="selected">Bar</option>
    <option value="3">Baz</option>
</select>

我已经尝试了使用该php:表达式的各种不同方法,甚至定义了我自己的 TALES 函数,但似乎没有什么能给我我想要的东西。

浏览器将selected属性出现的任何选项视为实际选中。这意味着 , selected,selected=""等都selected="foo"将选择该选项。PHPTAL 有一个内置的attribute value | nothing语法可以解决这个问题,但这只会nothing在空的情况下回退value,这对我没有帮助,因为我需要将它与一个值进行比较。像这样的东西(不起作用):

<option value="2" tal:attributes="selected (selectedValue == 2 ? 'selected' : NULL) | nothing">Bar</option>
4

1 回答 1

1

这应该足够了:

tal:attributes="selected php:selectedValue == 2"

PHPTAL 知道诸如selected和之类的属性,checked并将布尔值转换为正确的值。

php:selectedValue == 2 ? 'selected' : NULL也可以。

于 2011-12-29T16:56:46.667 回答