2011-02-08 4 views
0

나는이 현명한 다른 사람에게 내 머리를 쓰는 데 어려움을 겪고 있습니다. 각Smarty - 다른 옵션을 선택해야하는 경우 어려움

{foreach $values as $value} 

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

{/foreach} 

를 들어 나는 단지 전체의 foreach에 대해 한 번 '행동을 할'하고 싶다. foreach의 임의 반복에 대해 다른 조건 (a 또는 b)은 $ 값이 될 수 있습니다.

실제 작업 예제에서는 '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가됩니다 경우 첫 번째 -와 즉 prefil 형태 - 두 번째 부분은 기록을 편집 할 때 양식을 미리 작성되고 true가됩니다 형태가 끈적 만들 현재 값 사용자가 새 레코드를 만드는 경우 세 번째 부분이 true가되며,이 경우 사용자가 일반적으로 사용하는 기본 옵션으로 설정합니다. 선택 항목을 한 번만 추가 할 수있는 방법이 필요합니다. 제가 PHP를 선택하면 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

각 옵션에 적어도 하나의 옵션이 적용되기 때문에 작동하지 않습니다. 이것은 모든 옵션이 선택된 것으로 표시된다는 것을 의미합니다 – andrew

+0

실제로 문제가 더 자주 발생하게됩니다. 나는 그것을 알아 냈다고 생각한다. 내가 그것을 확인했을 때 나는 응답을 게시 할 것이다. – andrew

+0

당신의 질문은 다소 모호합니다. 그러므로'선택 '이'select'에서'option' 안에서 또는'option's 내에서 한번만 나타 내기를 원하는 곳을 이해하기가 어려웠습니다. 어쨌든, 질문은 'IF'와 관련이있는 것처럼 들리므로 최적화 된 솔루션을 제공했습니다. 원하는 언어는 사용하는 언어에 상관없이 추가 변수를 통해서만 얻을 수 있습니다. 그리고 부울 표현식에 변수를 포함시켜 올바른 결과를 얻으십시오. – AlexanderMP