2011-12-29 55 views
0

鑑於金屬宏,看起來像這樣:它使用類似這樣的宏觀PHPTAL條件屬性

<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> 

我試過v使用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> 

回答

1

這應該足夠了:

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

PHPTAL知道像selectedchecked屬性和將其轉換布爾改正值。

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

+0

謝謝,這個作品很棒。 – FtDRbwLXw6 2011-12-30 18:35:44

+0

如果我必須將循環中的「selectedValue」與repeat/item/key進行比較(例如,選擇標籤中的選項),該怎麼辦? – Meglio 2012-11-30 21:49:40

+1

@Meglio在'php中使用'repeat.item.key':' – Kornel 2012-12-10 11:39:28