次のような金属マクロがあるとします。
<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
属性が実際に選択されていると表示されるオプションを扱います。つまりselected
、selected=""
、selected="foo"
、 などがすべて選択されたオプションになります。PHPTAL にはこれを解決する構文が組み込まれていますが、これは空の場合にattribute value | nothing
のみフォールバックします。値と比較する必要があるため、これは役に立ちません。このようなもの(動作しません):nothing
value
<option value="2" tal:attributes="selected (selectedValue == 2 ? 'selected' : NULL) | nothing">Bar</option>