Условный атрибут PHPTAL - PullRequest
       17

Условный атрибут PHPTAL

1 голос
/ 29 декабря 2011

Учитывая металлический макрос, который выглядит следующим образом:

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

1 Ответ

1 голос
/ 29 декабря 2011

Этого должно быть достаточно:

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

PHPTAL знает о таких атрибутах, как selected и checked и преобразует логическое значение в правильное значение.

php:selectedValue == 2 ? 'selected' : NULL также будет работать.

...