Непонятки при работе с form api, интересует компонент select

Главные вкладки

Аватар пользователя usik usik 4 апреля 2013 в 17:35

Начал осваивать формы в друпале, вот что непонятно. Создал простой список

<?phpfunction createNameSelect(){
 return array(
        '#type' => 'select',
        '#title' => t('Страна'),
        '#required' => TRUE,
        '#options' =>array(
            '1'=>'Ivan',
            '2'=>'Petr',
        ),
    );
}?>

Список на форме , отображается нормально. Все выбирается. Но... Когда я в нем выбираю значение. Никаких сабмитов я не нажимаю, а потом обновляю страницу, то ранее выбранное значение в списке, у меня сохраняется. Смотрю файр багом, на код HTML,и вижу что в HTML компоненте select, метка selected стоит на option которое пустое. Т.е.

<option value='' selected></option>
<option value='1'>Ivan</option>
<option value='2'Petr</option>

А выбран ранее выбранный элемент Petr.
Что это за жесть за такая? Как от нее избавиться?

Комментарии

Аватар пользователя usik usik 6 апреля 2013 в 0:05

Уважаемый, это форум где начинающий может спросить, я тебе описал проблему. Такого не в одном фрэймворке я не встречал. Чего ты хочешь епт? Иди убейся. Не хочешь отвечать не надо, тоже мне умник- задрот блин конченый.

Аватар пользователя so-lo74 so-lo74 6 апреля 2013 в 1:59

Человек Вам ответил ).
- '#default_value' => xxx, означает выбранный элемент списка
- '#options' => array(t('None')) + $opt — все варианты в списке, включая «не выбрано».

Просто в элементах формы за варианты значений (опции) и выбранный вариант (или as default) отвечают разные поля.
Установите модуль devel, для работы с кодом Вам нужно это, а не firebug.
У себя в коде, ставите, например, так:
dsm($form), где $form — форма, к которой Вы прикрепили select ( у которого, кстати, не видно идентификатора, точнее, к чему и куда Вы его крепите, где вызываете свою функцию).
Там (в панели отладчика) прописаны все поля анализируемой структуры (в данном случае, формы).
Предупреждаю сразу — полей оочень много ). Там и увидите, из чего состоит select.

P.S. Использовать такую конструкцию '#title' => t('Страна'), бессмысленно, т.к. Вы же на русском пишете, к чему вызывать функцию локализации t()??