0

selectSmarty テンプレートに月名を含む単純な HTMLリストを作成しています。タイムスタンプ オブジェクトがテンプレートに渡されます。渡されたタイムスタンプの月を のデフォルト値にしたいと思いますselect。渡された値は、int(1,2,3,etc...) またはstring(jan,feb,mar,etc...) として渡すことができます。

デフォルトの選択された値を設定するには、渡された月のタイムスタンプを、テンプレートで作成したタイムスタンプと比較する必要があります。たとえば、今月だけと比較するには、次のようにします。

<option {if $smarty.now|date_format:"%b" = $passedInTimestamp['month']}selected{/if}>
    text
</option>

$smarty.now明らかに当月のみ機能します。タグが for ループ内にあり、1 から 12 までループしています。特定の月の<option>タイムスタンプを作成して、渡された月と比較するにはどうすればよいですか?

4

1 に答える 1

1

私がよく理解していれば、これはあなたが必要とするものです:

<select>
{for $i=1 to 12}
    <option {if '1-'|@cat:$i:'-':'Y'|date|@strtotime|date_format:"%b" == $passedInTimestamp['month']}selected{/if}>
        {$i}
    </option>
{/for}
</select>

まず、cat修飾子を使用して月の日付文字列を作成しました。

{'1-'|@cat:$i:'-':'Y'|date}
// will output 
// 1-1-2013   1-2-2013   1-3-2013 ....

次に、strtotime修飾子を使用してそれをtimstampに変換しました

{'1-9-2013'|@strtotime}
// will output 1377986400

最後にdate_format:"%b"、上記のように使用して、渡されたタイムスタンプの月と比較しました。

于 2013-09-26T04:07:35.250 に答える