Caixas de seleção: como defino os valores padrão ou mostro os valores definidos pelo usuário usando a API do formulário? [fechadas]

7

Estou usando um elemento de caixas de seleção em um formulário no módulo que comecei a desenvolver para o Drupal 7. Esta é minha primeira tentativa de desenvolvimento de módulos e uso da API de formulários. Estou criando uma lista de caixas de seleção que listam todos os tipos de conteúdo de um site específico. Uma matriz de todos os tipos de conteúdo pode ser obtido usando o seguinte: $nodeTypesRaw=node_type_get_names();. Uma matriz com os nomes de máquinas dos tipos de conteúdo como as chaves e os nomes legíveis por humanos como os valores são obtidos.

Por padrão, gostaria que todas as caixas de seleção fossem selecionadas e quando o formulário for enviado. Como faço para conseguir isso? As páginas da API do formulário no site drupal não são muito úteis no que diz respeito à definição dos valores padrão para caixas de seleção.

$nodeTypesRaw=node_type_get_names();
$nodeMachineNames=array_keys($nodeTypesRaw);
$form['process_comments']['custommod_published_comments_select_node_types']['custommod_published_comments_node_types_checkboxes']=array(
          '#deafult_value'=>$nodeMachineNames,
          '#options'=>$nodeTypesRaw,
          '#type'=>'checkboxes',
);

Inicialmente, comecei com o código acima, mas ele não funcionará. Ele exibe a lista de caixas de seleção, mas elas não são marcadas por padrão. A variável ainda recebe o envio do formulário (marcada via drush e var_dump).

bcosynot
fonte
2
É #default_value, não #deafult_value. FA não AF.
Mołot 29/07

Respostas:

16

Do Drupal.org :

$form['element_id'] = array(
  '#type' => 'checkboxes',
  '#options' => array(1 => "One", 2 => "Two", 3 => "Three"),
  '#default_value' => array(1, 3),
);

O valor padrão é definido como uma matriz que representa as chaves das opções selecionadas.

Observando o código da sua pergunta, o problema está na ortografia. você está definindo '#deafult_value'quando deseja definir '#default_value'.

Mołot
fonte
Uma matriz de todos os tipos de conteúdo pode ser obtido usando o seguinte: $nodeTypesRaw=node_type_get_names();. Uma matriz com os nomes de máquinas dos tipos de conteúdo como as chaves e os nomes legíveis por humanos como os valores são obtidos. Quando defino o '# default_value` usando a variável $nodeMachineNames=array_keys($nodeTypesRaw);, as caixas de seleção permanecem desmarcadas.
bcosynot
11
@ vr3690 Não, você não definiu o valor padrão. Veja o comentário na sua pergunta ou atualize para a minha resposta.
Mołot 29/07
10

Você precisa fornecer uma matriz de chaves de opção (não valores) como o valor padrão, por exemplo,

$options = array(
  'option_1' => t('Option 1'),
  'option_2' => t('Option 2'),
  'option_3' => t('Option 3'),
);

$defaults = array_keys($options);

$form['checkboxes'] = array(
  '#type' => 'checkboxes',
  '#title' => t('Something'),
  '#options' => $options,
  '#default_value' => $defaults,
);
Clive
fonte
Oi, eu já estou usando código semelhante. Eu editei minha resposta e adicionei a mesma. Isso não funciona.
bcosynot
11
Funciona bem para mim em um espaço em branco instalar, você tem certeza que você não tem um erro de digitação em #default_valuecomo @ MOLOT sugere
Clive
Apenas imaginando, isso mudou em algum momento? Porque eu estou olhando agora em form_process_checkboxe form_process_checkboxesde Drupal 7 e não há nenhum mecanismo que permitiria para este ao trabalho, e, claro, ele não funciona para mim. github.com/drupal/drupal/blob/7.x/includes/form.inc#L3270-L3351
Łukasz Zaroda
Não que eu saiba do @ asukaszZaroda ... se você olhar, user_account_formpor exemplo, o mesmo método é usado lá para os papéis
Clive