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>

式を使用したり、独自の TALES 関数を定義したりするさまざまな方法を試しましたphp:が、探しているものが得られないようです。

ブラウザは、selected属性が実際に選択されていると表示されるオプションを扱います。つまりselectedselected=""selected="foo"、 などがすべて選択されたオプションになります。PHPTAL にはこれを解決する構文が組み込まれていますが、これは空の場合にattribute value | nothingのみフォールバックします。値と比較する必要があるため、これは役に立ちません。このようなもの(動作しません):nothingvalue

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

1 に答える 1

1

それは十分なはずです:

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

PHPTAL はselectedandのような属性を認識しておりchecked、ブール値を正しい値に変換します。

php:selectedValue == 2 ? 'selected' : NULL同様に機能します。

于 2011-12-29T16:56:46.667 に答える