2011-02-08 22 views
0

私はこのスマートな人の周りに頭を浮かべるのに本当に問題があります。私は全体のforeachのために一度「アクションを行う」をしたい各Smarty - 他に選択肢を選択すると難しい

{foreach $values as $value} 

{if $value = a} 
    do action 
{elseif $value = b} 
    do action 
{elseif $value = c} 
    do action 
{/if} 

{/foreach} 

については 。異なる条件(aまたはb)が$ valueになる可能性があります。

実際の世界の例では、ドロップダウンオプションに 'selected'を追加しています。

<select> 
    {foreach $offices as $office}<!-- The if below is done so that the form is sticky, and when editing a post, it shows the post's current setting.--> 

     <option 

     {if $smarty.post.OfficeCode == $office.OfficeCode} 
       selected='selected' 
     {elseif $bulletin_array[0].OfficeCode == $office.OfficeCode} 
       selected='selected' 
     {elseif $office.OfficeCode == $UsersOffice} 
       selected='selected' 
     {/if}     

     title='{$office.Description}' value='{$office.OfficeCode}'>{$office.Title} 
</option> 

    {/foreach} 
</select> 

フォームがsubmitedされている場合であれば最初はtrueになります - 2番目の部分は、レコードを編集するときに、フォームが予め充填されている真になります フォームは粘着性にするために - すなわちprefilを持つフォーム現在の値 ユーザーが新しいレコードを作成している場合は3番目の部分がtrueになります。この場合、ユーザーが通常使用する既定のオプションに設定します。 私は選択が一度だけ追加できるようにするいくつかの方法が必要です。 私はforeachの外に変数を持ち、選択されていればtrueに設定されています。私はその後、if elseifを実行する前にその変数をチェックします

答えて

1
{if ($smarty.post.OfficeCode eq $office.OfficeCode) 
    or ($bulletin_array[0].OfficeCode eq $office.OfficeCode) 
    or ($office.OfficeCode eq $UsersOffice)} 
    selected='selected' 
{/if} 
+0

それぞれのオプションに少なくとも1つのオプションが当てはまるため、これは機能しません。これは、すべてのオプションが選択済みとしてマークされることを意味します – andrew

+0

あなたは実際には問題がより頻繁に発生すると答えます。私はそれを理解したと思う。私はそれをチェックしたときに私は回答を掲示するでしょう。 – andrew

+0

あなたの質問は少し曖昧ですので、 'selected'を' select'の中で、 'select'の' option'sの中で、一度表示させたい場所を理解するのは難しかったです。とにかく、質問は「IF」のように聞こえましたので、私は最適化されたソリューションを提供しました。あなたが望むのは、あなたが使用している言語を問わず、追加の変数によってのみ達成できます。そして、正しい結果を得るには、変数をブール式に含めます。 – AlexanderMP

関連する問題