Submitted by tamacheq on
Bonjour
Nous avons un formulaire avec des mots-clés affichés dans des listes déroulantes. Si l'utilisateur en sélectionne trop, la requête envoyée à Mysql comporte trop de jointures et le système crashe.
Je voudrais faire une validation avant l'envoi de la requête.
Je cherche à créer une fonction views-exposed-form-fiches-logiciels-page-1_validate(&$form, &$form_state). J'ai essayé de la créer dans un module et de lui donner le nom mymodule_views-exposed-form-fiches-logiciels-page-1_validate(&$form, &$form_state)
J'ai essayé de remplacer les tirets par des underscore.
J'ai essayé de créer une fonction mavalidation() que j'appelerai depuis
function mytheme_preprocess_views_exposed_form(&$vars, $hook) dans template.php avec $vars['form']['#validate'][] = 'mavalidation';
rien de tout ceci n'a fonctionné.
Quelqu'un aurait-il une idée?
Merci
Bonjour, <?phphook_form_alter
Permalien Soumis par bellesmanieres le 20 Octobre, 2010 - 16:01
Bonjour,
La fonction de validation recoit en argument $form et $form_state. On peut vérifier les valeurs dans $form_state['values'] et enchainer sur un form_set_error.
Voir http://api.drupal.org/api/file/developer/topics/forms_api.html/6 et http://api.drupal.org/api/drupal/developer--topics--forms_api_reference....
Pascal
Merci pour cette suggestion.
Permalien Soumis par tamacheq le 24 Octobre, 2010 - 22:03
Merci pour cette suggestion. Je l'avais déjà testée, mais peut-être n'ai-je pas mis le code dans le bon fichier. Est-ce dans template.php ou bien dans un module personnalisé? Est-ce que la fonction s'appelle hook_form_alter ou bien mymodule_form_alter?
Merci
AD
Dans un module custom, et le
Permalien Soumis par haza le 24 Octobre, 2010 - 23:11
Dans un module custom, et le nom doit être [NomDuModule]_form_alter()
Merci pour tous ces éléments.
Permalien Soumis par tamacheq le 24 Octobre, 2010 - 23:24
Merci pour tous ces éléments. J'ai enfin réussi à faire ce que je voulais.
Je poste le code pour ceux qui en auraient besoin.
AD
/**
* hook général sur les formulaires
* appliqué uniquement sur le formulaire de recherche de fiches logiciels (test sur l'id du formulaire)
*
/
function mymodule_form_alter(&$form, &$form_state, $form_id){
if ($form['#id'] == 'views-exposed-form-fiches-logiciels-page-1') {
$form['#validate'][] = 'mymodule_validation_recherche_logiciels';
}
}
/***
* fonction de validation des formulaires de recherche
* le formulaire n'est pas soumis si le nombre d'éléments recherchés est > à 20
/
function mymodule_validation_recherche_logiciels (&$form, &$form_state){
$cles = array_keys($form_state['values']) ;
$nbchoix = 0 ;
foreach ($cles as $cle)
{
// les variables get associées aux choix sont du type tid_n et l'opérande associé tid_n_op
// il y a aussi le paramètre tid (compatibilité avec ancienne version)
if ((!(strpos($cle, 'tid') === FALSE)) && (strpos($cle, '_op') === FALSE))
{
if (is_array($form_state['values'][$cle])) { $nbchoix = $nbchoix + count($form_state['values'][$cle]) ; }
else { $nbchoix ++ ; }
}
}
if ($nbchoix > 20) { form_set_error('views-exposed-form-fiches-logiciels-page-1',t('Too many items selected. Please select less items.')) ; }
}