2012-11-15 4 views
1

프로젝트의 내 전임자가 테이블의 드롭 다운 값을 저장하지 않았습니다. 그들은 html 파일에있었습니다 ... 그 사람도 선택을 만들기 위해 $form->dropdownList()을 사용하지 않았습니다 ...yii dropdown 같은 값으로 표시 하시겠습니까?

물론 제가 편집시 값을 미리 선택하는 데 큰 문제가있었습니다. 따라서 나는 <select>$form->dropdownList()으로 변경했습니다. 배열 ("예술 : 이제 DB에 대한 정수 값을 생성

echo $form->dropdownList($model,'location', 
     array("Art","Gallery","Bar","Club")); 

하지만 지금은 다른 문제가 ...

가 나는과 같이 표시 값을 설정할 수 있습니다 알고 "=>"Art ") .... 하지만 나는 이것을 피하고 싶습니다. 직접 값을 표시하는 뷰가 많습니다. ... :

yii에게 DB 값은 표시 값과 같아야합니까?

당신은 다음과 같이 dropDownList 방법 CActiveForm 위젯으로 대체 할 수 있습니다

답변

0

:

<?php 
class ActiveForm extends CActiveForm 
{ 
    public $valuesAsKeys = false; 

    public function dropDownList($model,$attribute,$data,$htmlOptions=array()) 
    { 
     if (!$this->valuesAsKeys) 
      return parent::dropDownList($model, $attribute, $data, $htmlOptions); 

     $newData = array(); 
     foreach ($data as $value) 
      $newData[$value] = $value; 
     return parent::dropDownList($model, $attribute, $newData, $htmlOptions); 
    } 
} 

을 다음과 같이 사용 : 배열 값은 고유

<?php 
$form = $this->beginWidget("application.components.ActiveForm", array(
    'valuesAsKeys' => true, 
    // other parameters here 
)); 

// Rendering form's elements here 
$this->endWidget(); 
+1

@Harry B의 답변이 더 적절합니다. – Gihan

+0

당신은 절대적으로 옳습니다! – Ezze

4

경우 (YII는 고유 키 필요), 당신을 사용할 수 있습니다 ...

$data = array("Art","Gallery","Bar","Club"); 
echo $form->dropdownList($model,'location', array_combine($data, $data)); 

array_combine는 리스트 데이터의 키와 값 모두에 대해 동일한 데이터.

0

해리 B의 대답은 훌륭하게 작동합니다. 감사합니다. 필자는 맞춤 옵션 값을 사용하고 프롬프트를 포함하기를 원했기 때문에 예제를 확장하기 위해 키와 값의 배열을 반환하는 메서드를 만들었습니다. 키 배열은 'prompt'로 시작하고 'values'배열은 '(select)'로 시작한 다음 데이터 소스를 반복하고 각 키를 키 배열에 추가하고 각 값을 값 배열에 추가했습니다. 내 코드는 정규식이 포함 된 좀 더 복잡하지만 다음과 같은 기본 요지가 있습니다.

 
// Controller method popupRowListValues($source) 
$displayKeys = array('prompt'); 
$displayValues = array('select'); 

foreach ($source as $key=>$value) { 
    $displayKeys[] = $key; 
    $displayValues = $value; 
} 

// View 
$displayList = $this->popupRowListValues($source); 

echo $form->dropDownListRow($model, $column_name, array_combine(
    $displayList['displayKeys'], $displayList['displayValues'] 
)); 
관련 문제