2009-08-11 27 views
14

Jak ustawić wybrane wartości dla wielokrotnego wyboru w moim kontrolerze? To jest mój kod tak dalekomultiselect, ustaw domyślne wybrane wartości

class Blog_Form_Post extends Zend_Form 
    { 
     public function init() 
     { 
    ... 
      $this->addElement('multiselect', 'categories', array(
       'label'  => 'Categories:', 
       'required' => false, 
      )); 
    ... 

      $form = new Blog_Form_Post(); 
      $categories = new Blog_Model_DbTable_Categories(); 
      $categories = $categories->fetchAll(); 
      foreach ($categories as $category) 
      { 
// Some of the categories needs to selected by default 
       $form->getElement('categories')->addMultiOption($category->ID, $category->name); 


     } 

Edytuj, aby być bardziej jasne. Biorę przykład z Aron Rotteveel

$multi->setMultiOptions(array(
    'foo' => 'Foo', 
    'bar' => 'Bar', 
    'baz' => 'Baz', 
    'bat' => 'Bat', 
)); 

Chcę Foo i bar, które zostaną wybrane podczas Baz i Bat powinna być zaznaczona, gdy formularz jest renderowane. IE

<select name="categories[]" id="categories" multiple="multiple"> 
    <option selected="selected" value="foo">foo</option> 
    <option selected="selected"value="bar">bar</option> 
    <option value="baz">baz</option> 
    <option value="bat">bat</option> 
</select> 
+0

Mam do czynienia z tym samym problemem z zf2, czy możesz mnie poprowadzić, jeśli masz jakiś pomysł. – Sarang

Odpowiedz

20

Można przekazać tablicę wartości do setValue().

Wartości w tablicy powinny odpowiadać kluczom przekazanym podczas ustawiania multiOptions.

$multi->setMultiOptions(array(
    'foo' => 'Foo', 
    'bar' => 'Bar', 
    'baz' => 'Baz', 
    'bat' => 'Bat', 
)); 

$multi->setValue(array('foo', 'bar')); 

From the ZF manual:

Aby oznaczyć sprawdzonych elementów, trzeba przekazać tablicę wartości do setValue().

+0

Niestety, nie wiem, czy mój wpis jest niejasny, czy źle zrozumiałeś post. Ale chcę ustawić niektóre opcje jako wybrane. Na przykład, jeśli użyjemy Twojego kodu. Chcę, aby wybrano Foo i Bar, a Baz i Bat do odznaczenia. – unkownt

+0

Dokładnie to robi powyższy kod. –

+1

Nie widzę żadnej wzmianki o wartości setValue() w dokumentacji. Połączyłeś multiCheckbox, ale nie multiselect. http://framework.zend.com/manual/1.12/en/zend.form.standardElements.html#zend.form.standardElements.multiselect – Jared

2

Zwykle używam setDefaults() na formie - można również użyć setValue() na elemencie, ale można ustawić multi-select w „wybranych opcji” jako tablicę wybranych identyfikatorów (tak jak to powraca do wartość).

$categories = // model funciton to get selected categories for this entry. 
$selected=array(); 
foreach ($categories as $category) 
{ 
    $selected[] = $category->ID; 
} 
$form->setDefaults(array('categories' => $selected)); 
+0

Dziękuję za odpowiedź, ale odpowiedź Aronsa jest o wiele piękniejsza – unkownt

+0

Jestem wciąż zastanawiasz się, dlaczego downvote ... $ form-> setDefaults() jest wart wspomnieć - pozwoli ci ustawić wiele wartości formularza jednocześnie. – gnarf

+0

Nie zagłosowałem za tobą, więc nie wiem. Czym właściwie jest to głosowanie? – unkownt

0

Jeśli wolisz, aby przejść do opcji, których autorem tablicy zamiast z wykorzystaniem elementów dyskretnych, można też to zrobić:

$this->addElement('select', 'element_name', array(
    'label'=>'Element Label', 
    'value'=> array('value_name'=>'Value Label', 
    'multiOptions' => array(
     'value_name'=>'Value Label', 
     'value_name_2'=>'Value Label 2', 
     'value_name_3'=>'Value Label 3', 
)); 

Ważną częścią jest kluczem „wartość” z tablicy $ options.

Spowoduje to wybór pierwszego elementu.

Powiązane problemy