Casillas de verificación: ¿cómo configuro los valores predeterminados o muestro los valores definidos por el usuario usando la API de formulario? [cerrado]

7

Estoy usando un elemento de casillas de verificación dentro de un formulario en el módulo que comencé a desarrollar para Drupal 7. Este es mi primer intento de desarrollo del módulo y uso de la API del formulario. Estoy creando una lista de casillas de verificación que enumeran todos los tipos de contenido de un sitio específico. Una matriz de todos los tipos de contenido se puede obtener mediante la siguiente: $nodeTypesRaw=node_type_get_names();. Una matriz con los nombres de máquina de los tipos de contenido como claves y los nombres legibles por humanos a medida que se obtienen los valores.

Por defecto, me gustaría que todas las casillas de verificación estén seleccionadas y cuando se envíe el formulario. ¿Cómo lo logro? Las páginas de API de formulario en el sitio de drupal no son muy útiles para establecer los valores predeterminados para las casillas de verificación.

$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 comencé con el código anterior, pero no funcionará. Muestra la lista de casillas de verificación, pero no están marcadas de forma predeterminada. Sin embargo, la variable se presenta en el envío del formulario (verificada mediante drush y var_dump).

bcosynot
fuente
2
Es #default_value, no #deafult_value. FA no AF.
Mołot

Respuestas:

16

De Drupal.org :

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

El valor predeterminado se establece como una matriz que representa las claves de las opciones seleccionadas.

Mirando el código en su pregunta, el problema es con la ortografía. está configurando '#deafult_value'cuando desea configurar '#default_value'.

Mołot
fuente
Una matriz de todos los tipos de contenido se puede obtener mediante la siguiente: $nodeTypesRaw=node_type_get_names();. Una matriz con los nombres de máquina de los tipos de contenido como claves y los nombres legibles por humanos a medida que se obtienen los valores. Cuando configuro el '# default_value` usando la variable $nodeMachineNames=array_keys($nodeTypesRaw);, las casillas de verificación permanecen sin marcar.
bcosynot
1
@ vr3690 No, no estableció el valor predeterminado. Vea el comentario debajo de su pregunta o actualice mi respuesta.
Mołot
10

Debe proporcionar una matriz de teclas de opción (no valores) como el valor predeterminado, p. Ej.

$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
fuente
Hola, ya estoy usando un código similar. Edité mi respuesta y le agregué la misma. Esto no funciona.
bcosynot
1
Funciona bien para mí en una instalación en blanco, ¿estás seguro de que no tienes un error tipográfico #default_valuecomo sugiere @ Mołot
Clive
Solo me preguntaba, ¿cambió en algún momento? Porque estoy buscando ahora mismo en form_process_checkboxy form_process_checkboxesde Drupal 7 y no hay ningún mecanismo que permita para que esto funcione, y por supuesto no funciona para mí. github.com/drupal/drupal/blob/7.x/includes/form.inc#L3270-L3351
Łukasz Zaroda
No es que yo sepa de @ ŁukaszZaroda ... si nos fijamos, user_account_formpor ejemplo, el mismo método se utiliza allí para los roles
Clive