2012-12-05 47 views
0

我試過一種簡單的方法來創建複選框以及任何php形式的單選按鈕。唯一的事情是我正在使用Codeigniter MVC框架。有沒有更好的方法來創建複選框和單選按鈕在PHP形式?

這裏是你可以插入你的共同模型或任何幫助文件的函數定義。

function createOptions($fieldName, $labelsArray=array(), $selectedOption, $fieldType,$valuesArray = array()) { 
     $returnString = ''; 
     if(count($valuesArray)!=count($labelsArray)) 
      $valuesArray=$lebelsArray; 
     if ($fieldType === 'checkbox') { 
      for ($i=0;$i<count($labelsArray);$i++) { 
       $returnString.='&nbsp&nbsp&nbsp<input type="checkbox" name=' . $fieldName.' value='.$valuesArray[$i].' id='.$valuesArray[$i]; 
       if(in_array($valuesArray[$i], $selectedOption)){ 
         $returnString.=' checked="checked" '; 
       } 
       $returnString.=' />&nbsp&nbsp<label>'.$labelsArray[$i].'</label>'; 
      } 
     } 
     if ($fieldType === 'radio') { 
      for ($i=0;$i<count($labelsArray);$i++) { 
       $returnString.='&nbsp&nbsp<input type="radio" name=' . $fieldName.' value='.$valuesArray[$i].' id='.$valuesArray[$i]; 
       if($valuesArray[$i]== $selectedOption) 
         $returnString.=' checked="checked" '; 
       $returnString.=' /><label>'.$labelsArray[$i].'</label>'; 
      } 
     } 
     return $returnString; 
    } 

而且,你必須調用視圖文件,因爲這功能,

<?php 
echo $this->common_model->createOptions('userHobbies[]', $hobbyOptions, $userHobbies, 'checkbox'); ?> 

第一個參數是複選框字段或無線電場,這始終會是相同的,對於兩種情況的所有選項的名稱。第二個是標籤數組,第三個是選擇的選項,它會在加載表單時顯示這些選項。第四種是字段類型,它是一個字符串,如'checkbox'或'radio'。第五個是values數組,如果存在的話,它將包含與標籤相同順序的標籤值。如果不存在,標籤數組將被視爲值數組。 我想知道這個代碼中是否有進一步的優化可能?

回答

1

我設法把它帶到這裏。

$selectedOption現在可以是一個字符串或數組,但會自動剪切爲1個大小的無線電框。

對於任何一種輸入類型,您都有一些代碼重複,因此它們已經組合並適用於一些工作。

我給你的問題是,你真的需要抽象出html元素的創建嗎?

此外,我應該注意的是,您訂閱了多個編碼標準(如果使用大括號而不使用大括號之間彈跳,則使用1個班輪)。它在技術上並不重要,你可以嘗試堅持使用其中一種。

function createOptions($fieldName, $labelsArray=array(), $selectedOption, $fieldType, $valuesArray = array()) { 
    $returnString = ''; 
    $selectedOption = (array) $selectedOption; 

    if(count($valuesArray) != count($labelsArray)) 
     $valuesArray = $labelsArray; 

    if ($fieldType === 'radio') 
     $selectedOption = array_slice($selectedOption, 0, 1); 

    for ($i=0; $i < count($labelsArray); $i++) 
    { 
     $returnString .= sprintf('&nbsp; &nbsp;<input type="%s" name="%s" value="%s" id="%s"', 
      $fieldType, $fieldName, $valuesArray[$i], $valuesArray[$i]); 

     if(in_array($valuesArray[$i], $selectedOption)) 
       $returnString .= ' checked="checked" '; 

     $returnString .= ' />&nbsp&nbsp<label>'.$labelsArray[$i].'</label>'; 
    } 

    return $returnString; 
} 
+0

感謝您的儘量減少代碼。 –

+0

是的,實際上,我創建了一個表單,用於獲取包括用戶愛好作爲複選框字段和用戶性別作爲無線電字段的用戶信息。所以我發現這種方式更好地動態創建這些字段。你的代碼也更好。 –

+0

Castis,對不起,但我無法得到你所談論的編碼標準,我正在使用netbeans編輯器的「格式化」工具(Alt + Shift + F)。 –

相關問題