Cases à cocher: comment définir les valeurs par défaut ou afficher les valeurs définies par l'utilisateur à l'aide de l'API Form? [fermé]

7

J'utilise un élément de cases à cocher dans un formulaire dans un module que j'ai commencé à développer pour Drupal 7. C'est ma première tentative de développement de module et d'utilisation de l'API Form. Je crée une liste de cases à cocher répertoriant tous les types de contenu d'un site spécifique. Un tableau de tous les types de contenu peuvent être obtenus en utilisant ce qui suit: $nodeTypesRaw=node_type_get_names();. Un tableau avec les noms de machine des types de contenu comme clés et les noms lisibles par l'homme comme valeurs sont obtenus.

Par défaut, je souhaite que toutes les cases à cocher soient sélectionnées et lorsque le formulaire est envoyé. Comment puis-je y parvenir? Les pages de l'API Form sur le site drupal ne sont pas très utiles pour définir les valeurs par défaut des cases à cocher.

$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',
);

J'ai d'abord commencé avec le code ci-dessus, mais cela ne fonctionnera pas. Il affiche la liste des cases à cocher, mais elles ne sont pas cochées par défaut. Cependant, la variable est soumise lors de la soumission du formulaire (vérifiée via drush et var_dump).

bcosynot
la source
2
Ce n'est #default_valuepas le cas #deafult_value. FA pas AF.
Mołot

Réponses:

16

De Drupal.org :

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

La valeur par défaut est définie comme un tableau représentant les clés des options sélectionnées.

En regardant le code dans votre question, le problème est avec l'orthographe. vous définissez '#deafult_value'quand vous voulez définir '#default_value'.

Mołot
la source
Un tableau de tous les types de contenu peuvent être obtenus en utilisant ce qui suit: $nodeTypesRaw=node_type_get_names();. Un tableau avec les noms de machine des types de contenu comme clés et les noms lisibles par l'homme comme valeurs sont obtenus. Lorsque j'ai défini la «# valeur_par défaut» à l'aide de la variable $nodeMachineNames=array_keys($nodeTypesRaw);, les cases à cocher ne sont pas cochées.
bcosynot
1
@ vr3690 Non, vous n'avez pas défini de valeur par défaut. Voir le commentaire sous votre question, ou mettre à jour ma réponse.
Mołot
10

Vous devez donner un tableau de clés d' option (pas des valeurs) comme valeur par défaut, par exemple

$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
la source
Salut, j'utilise déjà un code similaire. J'ai modifié ma réponse et y ai ajouté la même chose. Cela ne fonctionne pas.
bcosynot
1
Fonctionne très bien pour moi dans une installation vierge, êtes-vous sûr que vous n'avez pas de faute de frappe #default_valuecomme @ Mołot le suggère
Clive
Je me demandais simplement si cela avait changé à un moment donné. Parce que je regarde en ce moment form_process_checkboxet form_process_checkboxesde Drupal 7 et il n'y a aucun mécanisme qui permettrait que cela fonctionne, et bien sûr cela ne fonctionne pas pour moi. github.com/drupal/drupal/blob/7.x/includes/form.inc#L3270-L3351
Łukasz Zaroda
Pas que je sache @ ŁukaszZaroda ... si vous regardez user_account_formpar exemple, la même méthode est utilisée là pour les rôles
Clive