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).


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'.


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.