Modifier un formulaire existant

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Voici une description de ce que je souhaite faire :
J'ai une table perso qui associe à chaque terme de taxonomie, un champ texte "requete" (dans lequel sera stocké une requête correspondant au terme).

Lors de l'ajout d'un terme de taxonomie, je veux donc que ce champ "requête" apparaisse, en plus des champs déjà existants.

Donc ma question est : comment faire pour modifier le formulaire généré par le module taxonomy ?

J'ai regardé du coté de hook_form_alter, mais j'avoue n'y avoir pas compris grand chose...

Forum : 
Version de Drupal : 

Trouvé ! En fouinant un peu, j'ai fini par comprendre.
Dans un module perso, j'ai écrit le code suivant :

// les 3 fonctions suivantes sont utilisées pour ajouter un champ REQUETE pour chaque terme de taxo
function votremodule_form_alter ($form_id, &$form) {

   if ($form['#id'] == 'taxonomy-form-term')
{
      $form['requete'] = array(
        '#type' => 'textarea',
      '#title' => t('votre-titre'),
       '#description' => t('description, etc.'),
       '#default_value' => '',
     ); 
        $form['parent']['#weight'] = 0;
        $form['name']['#weight'] = 2;
        $form['requete']['#weight'] = 3;
        $form['description']['#weight'] = 4;
        $form['synonyms']['#weight'] = 6;
        $form['weight']['#weight'] = 7;
        $form['submit']['#weight'] = 9;
$term_name = $form['name'];
  $form['#submit'] = array('votremodule_submit' => array()) + (array)$form['#submit'];
        }
}

function votremodule_submit($form_id, $form_values) {
  switch (encore_une_fonction_save_requete($form_values)) {
    case SAVED_NEW:
      drupal_set_message(t('Requete creee : %term.', array('%term' => $form_values['requete'])));
      break;
    case SAVED_UPDATED:
      drupal_set_message(t('Requete mise a jour : %term.', array('%term' => $form_values['requete'])));
      break;
  }
   return 'admin/content/taxonomy';
}

function encore_une_fonction_save_requete($form_values) {
   if ($form_values['tid'] && $form_values['requete'])
   {
      db_query("UPDATE ...");
      $status = SAVED_UPDATED;
   }
  else
  {
      db_query("INSERT INTO ....");
        $status = SAVED_NEW;
   }
  return $status;
}

Tout marche nickel.

Je me re-répond, si ça en intéresse quelques uns.

Les 2 1ères fonctions n'ont pas de problèmes, mais la dernière :
function encore_une_fonction_save_requete($form_values) était truffée d'erreurs.

Bref, après correction, ça donne ça :

function encore_une_fonction_save_requete($form_values) {

   $a = taxonomy_get_term_by_name($form_values['name']);
    foreach ($a as $b)
{
      $tid = $b->tid;
}
  $x=db_fetch_object(db_query("SELECT * from le_nom_de_ma_nouvelle_table where tid = %d", $tid));

if(!$tid)       // si le terme n'existe pas
   {
      $tid = db_next_id('{term_data}_tid')+1;
      db_query("INSERT INTO le_nom_de_ma_nouvelle_table (tid, requete) VALUES ( %d, '%s')", $tid, $form_values['requete']);
        $status = SAVED_NEW;
   }
  elseif (!$x)    // si le terme existe dans term_data mais pas dans le_nom_de_ma_nouvelle_table
{
      //print $tid;
      db_query("INSERT INTO le_nom_de_ma_nouvelle_table (tid, requete) VALUES ( %d, '%s')", $tid, $form_values['requete']);
        $status = SAVED_NEW;
   }
  else        // si le terme existe dans le_nom_de_ma_nouvelle_table
{
      db_query("UPDATE le_nom_de_ma_nouvelle_table SET requete = '%s' WHERE tid = %d", $form_values['requete'], $tid);
     $status = SAVED_UPDATED;
   }
  return $status;
}

Bon, j'avais oublié de prendre en compte la suppression du terme (et donc de la requête associée).
Mais le principe est le même, donc je ne vais pas encore tout recopier ici une fois de plus (sauf si ça intéresse quelqu'un, dans ce cas, pas de problème).