Comment rendre obligatoire un champ de formulaire
Par bb, mardi 1er juin 2010 à 12:23 :: SPIP ::#105
Il y a quelques temps lors d’un Apéro SPIP, Jean-Marie me demandait :
Comment obliger les visiteurs à remplir le champ nom du formulaire de forum ?
On pourrait surcharger le fichier squelettes-dist/formulaires/forum.php mais ce n’est pas une solution pérenne, car il faudrait le mettre à jour à chaque modification du fichier orignal fourni par SPIP.
Pour faire les choses proprement, on va utiliser le pipeline formulaire_verifier pour insérer notre vérification supplémentaire dans le formulaire de forum.
Ci-dessous, le code à coller dans config/mes_options.php :
// on ajoute notre fonction dans le pipeline de verification des formulaires
// http://programmer.spip.org/Qu-est-ce-qu-un-pipeline
$GLOBALS['spip_pipeline']['formulaire_verifier'] .= '|nom_obligatoire';
// la fonction qui verifie que le nom n'est pas vide
function nom_obligatoire($flux){
$form = $flux['args']['form'];
if ($form=='forum'){
if (!sinon($GLOBALS['visiteur_session']['nom'],$GLOBALS['visiteur_session']['session_nom'])){
$flux['data']['message_erreur'] .= _T('nom_obligatoire');
$flux['data']['session_nom'] = _T('nom_obligatoire');
unset($flux['data']['previsu']);
}
}
return $flux;
}Il nous reste à définir la chaîne de langue nom_obligatoire dans un fichier squelettes/local_fr.php et hop "ça poutre" ;)
Commentaires
merci de l’astuce, j’ai testé mais ça ne marche pas ?? (spip 2.1)
sinon pour rendre l’email obligatoire mais pas le nom on fait comment ?
@+
Oups, il y avait une petite coquille, j’ai corrigé le code et cette fois ça fonctionne bien avec SPIP 2.1.
Pour tester la présence de l’email il suffit de remplacer :
sinon($GLOBALS['visiteur_session']['nom'],$GLOBALS['visiteur_session']['session_nom'])par :
sinon($GLOBALS['visiteur_session']['email'],$GLOBALS['visiteur_session']['session_email'])++
Ouais, ça poutre ! Merci pour le tuyaux...
merci ça marche très bien, par contre comment indiquer que le CSS doit mettre le champs nom ou email en cause soit rouge ??
@+