2013-01-18 40 views
1

我有幾個字段,比如用於個人資料的字段以及每個字段有幾個選項。Smarty模板 - 爲動態複選框名稱選中複選框值時出現問題

例如,

Age (10-15, 15-20, 20-25) 
Category (X, Y, Z) 

和其他幾個字段。

我有所有這些字段的搜索頁面以及它們的選項值作爲複選框。 所以我用下面的for-each循環

{foreach from=$field.options item=options} 
<input name="{$field.field_search_name}[]" type="checkbox" value="{$options.url}" /> 
{$options.caption} 
{/foreach} 

現在的問題是,使所有被選中之前提交的領域,我需要證明從POST陣列選擇 當前打印這些值。

我知道,如果我們有靜態複選框名稱,比如「類別[]」我可以做類似下面

{if in_array($options.url, $smarty.post.category)} checked {/if} 

,但在我的案件的複選框的名字也是動態的,它被定義只在smarty模板中,所以我不知道如何解決這個問題。 像下面這樣的東西必須得到處理,請讓我知道如果有可能在smarty做到這一點。

{if in_array($options.url, $smarty.post.$field.field_search_name)} checked {/if} 
+0

我在尋找這個問題的幫助。如果我需要更多細節,請告訴我。 – Minesh

回答

4

如果你想擁有的複選框選中爲每個請求中設置的POST字段,你可以通過訪問它們:

{if array_key_exists({$smarty.request, $field.field_search_name)} 
    checked 
{/if} 

但是這將取決於輸入的名稱是唯一的。如果您使用[]的字段名稱使其在提交表單時成爲數組,則應檢查值是否在數組中。

這需要一點點的黑客來訪問數組:

{assign var=tempFieldName value=`$field.field_search_name`} 

{if in_array({$smarty.request.$tempFieldName, $options.url)} 
    checked 
{/if} 

說實話,雖然,我建議你產生每個輸入唯一的名稱,而不是相同的名稱將數,並使用它們分開fieldName[]將這些值匿名推送到數組中。這樣做可以減少您無法直接訪問POSTed變量的問題。

+0

感謝您的回答,是的,它按需運作。 我試圖如下,其中** $ postArr **從PHP文件分配** $ _ POST **被分配,我應該嘗試更多,但是謝謝你的幫助 {assign var = fldname value = $ field.field_search_name} { 如果array_key_exists($ fldname,$ postArr)} 檢查 {}其他 <! - 檢查 - > {/ if}個 – Minesh

+0

請不要忘記分配紅利「。 – Danack

+0

這個答案應該修改,以修正in_array(needle,haystack)中的參數順序。 – oevna