Submitted by fishclic on
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...
Trouvé ! En fouinant un
Permalien Soumis par fishclic le 5 Février, 2009 - 09:09
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
Permalien Soumis par fishclic le 5 Février, 2009 - 15:47
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
Permalien Soumis par fishclic le 6 Février, 2009 - 10:22
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).