Quando crio uma caixa de seleção padrão usando a API do formulário Drupal 7, o primeiro valor (também o selecionado em um novo 'formulário em branco') é <option selected="selected" value="">- Select -</option>
. Este valor não está especificado na definição do formulário e não estou alterando o formulário. (Isto é bom)
No entanto, quando eu crio uma segunda caixa de seleção que depende do primeiro uso #states
, ela não possui esse valor padrão. Para formulários complexos com várias dependências, essa inconsistência é um problema.
Um exemplo de definição de formulário é o seguinte:
function sb_quickquote_test_form($form, &$form_state, $post=array()) {
$fields['first_select'] = array(
'#type' => 'select',
'#title' => 'First select box',
'#options' => Array('First', 'Second', 'Third'),
'#required' => TRUE,
);
$fields['dependent_delect'] = array(
'#type' => 'select',
'#title' => 'Dependent select box',
'#options' => Array('Something', 'Another thing', 'Something else', 'Final thing'),
'#states' => Array(
'visible' => Array('select[name=first_select]' => array('value' => '2')),
'required' => Array('select[name=first_select]' => array('value' => '2')),
),
);
$fields['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $fields;
}
Neste exemplo simples, temos 2 caixas de seleção e um botão de envio. As duas caixas de seleção são exibidas como:
______________ ________________
| - Select - |v| | Something |v|
`--------------' `----------------'
| - Select - | | Something | <- no empty option
| First | | Another thing |
| Second | | Something else |
| Third | | Final thing |
-------------- ----------------
(Devido à #states
configuração, a segunda caixa de seleção aparece apenas quando a primeira caixa de seleção tem "Terceiro" selecionado)
Essa inconsistência está causando problemas em uma situação em que estamos gerando formas dinâmicas complexas com campos interdependentes.
Alguém tem alguma idéia de por que os campos recebem opções inconsistentes e qual a melhor abordagem para solucionar o problema?
você precisa alterar isso:
selecione para: entrada
o código correto é:
fonte
Para estender a resposta do doterobcn, você também pode definir o valor vazio (a chave) da sua opção vazia.
No Drupal 8:
O que dará:
fonte