web-dev-qa-db-fra.com

Définir par programme la valeur par défaut d'un champ

Dans Drupal 6, nous pourrions utiliser PHP pour définir les valeurs par défaut, mais le même code ne peut pas être utilisé avec Drupal 7 .

J'essaie de le faire via hook_form_alter(), mais le code ne fonctionne pas.

function my_form_alter(&$form, &$form_state, $form_id) {
  dsm($form);

  switch($form_id) {
    case 'accounts_node_form':
      $form["field_accounts"]["und"]['#default_value'] = $default;
      // …
      break;
  }
}
10
giorgio79

En supposant que votre fonction alter form est en cours d'exécution (ce que vous pouvez confirmer avec cet appel à dsm()), il y a en fait 2 autres niveaux de tableau dans lesquels vous devez descendre pour accéder à l'élément field:

$form["field_accounts"][LANGUAGE_NONE][0]['value']['#default_value'] = $default;

Dans Drupal 7, vous avez un tableau de valeurs pour chaque langue dans laquelle le champ a été traduit (de sorte que les champs avec une cardinalité multiple/illimitée peuvent être pris en charge), et sous chacun d'eux se trouve dans tableau pour les différentes colonnes de champ différentes. Dans la majorité des cas, ce sera "valeur" mais pas toujours (par exemple, un champ d'image a une colonne d'ID de fichier, une colonne alt, etc.)

J'espère que cela pourra aider

17
Clive

C'est correct:

function my_form_alter(&$form, &$form_state, $form_id) {
  dsm($form);

  switch($form_id) {
    case 'accounts_node_form':
      $form["field_accounts"][LANGUAGE_NONE][0]['value']['#default_value'] = $default;
      // …
      break;
  }
}
0
keopx

Cela fonctionne bien:

function my_form_alter(&$form, &$form_state, $form_id) {
  dsm($form);
  switch($form_id) {
    case 'accounts_node_form':
      $form["field_accounts"]["und"][0]['value']['#default_value']=$default;
      break;
  }
}
0
keopx