Заполните поле Zend Multiselect во время редактирования формы - PullRequest
4 голосов
/ 25 апреля 2011

В моей форме Zend есть поле множественного выбора (интересов), и я выбираю несколько вариантов из него, когда добавляю пользователя.

Теперь, когда я редактирую этого пользователя, мне нужно установить некоторые параметры, выбранные по умолчанию (которые я выбрал при добавлении пользователя).

Как мне этого добиться? Я использовал populate (Array) в действии обновления моего контроллера, но это не работает.

Это код поля множественного выбора в пользовательской форме добавления / редактирования:

$interests = new Zend_Form_Element_Multiselect('interest');
$days->setLabel('Interests')
->addMultiOptions($user_interests)
->setRequired(true)
->addValidator('NotEmpty');

А при добавлении в форму параметров «проценты» массив $user_interests выглядит так:

array(1=>'Blogging', 2=>'Swimming', 3=>'Cricket', 4=>'Yoga')

Я выбрал первые 2 интереса при добавлении пользователя.

Теперь при редактировании я получаю пользовательские данные из запроса к базе данных. Этот массив данных используется для заполнения формы, и эта структура массива выглядит следующим образом:

Array ( 
[username] => john 
[user_dob] => 1981-03-12 
[email] => john@gmail.com 
[interest] => Array ( [0] => 1 [1] => 2 ) 
)

и, как вы можете видеть, интересы "Блоггинг" и "Плавание" должны быть выбраны в моей форме редактирования. Но я вижу, что выбирается только опция «Плавание».

Ответы [ 3 ]

6 голосов
/ 16 мая 2011
$interest_data = $users->getUserInterests($id);

 foreach($interest_data as $r)
 {
   $interests[$r['interest_id']] = $r['interest'];
 }

 $this->view->interests_selected = $interests;

После этого у нас может получиться вот так в контроллере

$form->interest_id->setValue($interests);

Надеюсь, это кому-нибудь поможет

1 голос
/ 25 апреля 2011

Лучший способ проверить в этой ситуации - отправить форму с выбранными элементами, выгрузить массив $form->getValues() и сравнить его с тем, что вы пытаетесь заполнить. Если это то же самое, то у вас может быть другая ошибка в вашем коде.

0 голосов
/ 29 апреля 2011

Ну, я мог бы найти решение с помощью jquery и javascript.

Сначала в своем контроллере я запросил базу данных и получил все интересы редактирования идентификатора пользователя. Затем я присвоил этот массив соответствующему представлению:

$interest_data = $users->getUserInterests($id);

foreach($interest_data as $r)
{
 $interests[$r['interest_id']] = $r['interest'];
}

$this->view->interests_selected = $interests;

Теперь в представлении, в верхней части файла, внутри функции готовности документа jquery, я преобразовал назначенный массив php в массив javascript, а затем перебрал этот массив, чтобы отметить выбранные параметры из всех параметров:

<script>
$(document).ready(function() {

<?php
// array of assigned interests to user
$arr = $this->interests_selected;
?>

// convert from php to js array
var jsArray = ["<?php echo join("\", \"", $arr); ?>"];

var optionsToSelect = jsArray;
var select = document.getElementById( 'interest_id' ); // interests dropdown

// loop through all the select box options and mark those in the jsArray as selected

for ( var i = 0, l = select.options.length, o; i < l; i++ )
{
  o = select.options[i];
  if ( optionsToSelect.indexOf( o.text ) != -1 )
  {
    o.selected = true;
  }
}

});
</script>
...