给定如下的金属宏:
<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
语法来解决这个问题,但这只会在value
为空的情况下回落到nothing
,这对我没有帮助,因为我需要将它与一个值进行比较。像这样(不工作):
<option value="2" tal:attributes="selected (selectedValue == 2 ? 'selected' : NULL) | nothing">Bar</option>
这应该足够了:
tal:attributes="selected php:selectedValue == 2"
PHPTAL知道像selected
和checked
这样的属性,并将布尔值转换为正确的值。
php:selectedValue == 2 ? 'selected' : NULL
也可以