2010-07-09 3 views
2

Я хочу повторно заполнить (i.e refill) значения, отправленные из поля формы выбора после проверки. Я знаю, что руководство пользователя codeigniter, предлагаемое с помощью функции set_select(), но их пример из руководства предполагает, что вы жестко закодировали (в HTML) массив значений для элемента формы «select». В моем случае я использовал форму Helper и мои выбор значений полей вытягиваются из массива() как так:Репопуляция Выберите поля формы в CodeIgniter


$allstates = array('blah','blah2','blah3','blah4','blah5'); 
echo form_label('Select State Affiliate', 'state'); 
echo form_dropdown('state', $allstates); 

Излишне говорить, что $ allstates массив является динамическим и изменяется с течением времени. Итак, как я могу кодировать так, чтобы поле выбора могло быть повторно заполнено значением, которое выбрал пользователь?

ответ

4

Вы можете установить значение, которое должно быть предварительно выбрано с помощью третьего параметра form_dropdown. Значение, выбранное пользователем на предыдущем шаге, находится в $ this-> input-> post ('state'). Таким образом, вы будете использовать:

echo form_dropdown('state', $allstates, $this->input->post('state')); 

От руководства пользователя:

Первый параметр будет содержать имя поля, второй параметр будет содержать ассоциативный массив опций, а третий параметр будет содержит значение, которое вы хотите выбрать

$options = array(
       'small' => 'Small Shirt', 
       'med' => 'Medium Shirt', 
       'large' => 'Large Shirt', 
       'xlarge' => 'Extra Large Shirt', 
      ); 

$shirts_on_sale = array('small', 'large'); 

echo form_dropdown('shirts', $options, 'large'); 

// Would produce: 

<select name="shirts"> 
<option value="small">Small Shirt</option> 
<option value="med">Medium Shirt</option> 
<option value="large" selected="selected">Large Shirt</option> 
<option value="xlarge">Extra Large Shirt</option> 
</select> 
+0

Упс! Почему я не подумал об этом? Просто используйте функцию: $ this-> input-> post ('name_of_field')), чтобы вернуть значение поля. Большое спасибо человеку! Работала отлично, и мне нравится это решение, потому что это просто и коротко. – dtechplus

2

Иногда, особенно при работе с объектами, возможно, было бы легче сделать это без формы помощника :

<select name="my_select> 
    <?php foreach ($my_object_with_data as $row): ?> 
    <option value="" <?php if (isset($current_item->title) AND $row->title == $current_item->title) { echo 'selected="selected"';} ?> > 
     <?php echo $row->title; ?> 
    </option> 
    <?php endforeach; ?> 
</select> 

Я знаю, что это очень некрасиво, но в большинстве случаев это был самый простой способ сделать это при работе с объектами вместо ассоциативного массива.

+0

Этот тип кода лучше в контроллере, чем в представлении. Это хороший пример использования хелпера формы для создания выпадающих списков, он чище. – stef

+0

Помощник формы ожидает ассоциативный массив, объект будет вызывать ошибки преобразования строки. –