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" ;)
Messages
1er juin 2010, 20:05, par hamid
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 ?
@+
1er juin 2010, 21:52, par bb
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'])
++
2 juin 2010, 12:26, par jeanmarie
Ouais, ça poutre ! Merci pour le tuyaux...
2 juin 2010, 16:19, par hamid
merci ça marche très bien, par contre comment indiquer que le CSS doit mettre le champs nom ou email en cause soit rouge ??
@+
3 novembre 2010, 14:54, par N’y aurait-il pas une faille dans les forums spip ? Dans le cas ci-présent (…)
Bonjour,
l’astuce est sympathique mais il semblerait quand même qu’une faille embêtante existe au sein du formulaire de base.
L’explication par l’exemple, on peut injecter du code via le fomulaire.
4 novembre 2010, 13:07, par bb
Salut, oui on peut entrer du html dans les champs des formulaires de SPIP (et pas seulement celui des forums). Ce n’est pas une faille mais une fonctionnalité :p
On peut bien sûr se poser la question de la validité ou de l’intérêt d’une telle fonctionnalité (on a déjà discuté de l’éventualité d’interdire tout code html dans les formulaires de forum à l’aide du plugin nospam). N’hésite pas à venir en discuter sur la liste spip-dev ou spip-zone.
++
8 novembre 2010, 10:03, par Khay
Bonjour,
merci pour la réponse :), j’avoue ne pas avoir trouvé de doc spécifique sur la théorie qui se cache derrière le formulaire de forum, de même j’ai été plutôt déconcerté par la construction du formulaire puisque la partie html prévoit une gestion assez poussée des forums, toutes les span de récupération des erreurs etc. étant présentes. Pourtant la partie php "s’arrête en chemin" lorsqu’elle s’attaque à la partie vérifier, par exemple la syntaxe de l’email optionnelle n’est pas filtrée et de base aucun message d’erreur n’est renvoyé.
Si tu as un lien sur le sujet je suis plus que preneur ;)
@+
8 novembre 2010, 14:39, par bb
Salut, l’email optionnel n’est pas vérifié car il est justement...optionnel ;) Tu peux t’inspirer du code que je donne dans cet article pour ajouter une vérification sur l’email à l’aide de la fonction email_valide() de SPIP.
++
22 novembre 2010, 09:34, par Khay
Bonjour,
je comprends bien que ces champs ne sont pas traités car ils sont optionnels, cependant je vois plutôt des champs optionniels comme des champs que l’utilisateur peut remplir ou laisser vide, mais cela n’implique pas que les données saisies si ce dernier choisit de les saisir ne soient pas traitées.
Evidemment c’est une question de point de vue :]
27 janvier 2011, 16:51, par Suske
haaa ! Bien bien...
Merci b_b !
¨Placé ici : http://forum.spip.org/fr_231904.html
(moi j’aime bien qu’on puisse utiliser le html :-p)2 février 2011, 15:28, par Fil
Ca répond au besoin, mais c’est trop de code. A la réflexion ce serait peut-être pas mal d’avoir la possibilité de déclarer "obligatoire" n’importe quel champ de n’importe quel CVT avec une technique déclarative toute simple, dans le charger() ou dans le squelette du formulaire ?
7 février 2011, 23:17, par Fredalex
Bonjour,
J’utilise votre astuce mais j’ai quelques utilisateurs qui me remontent que cela ne fonctionnent pas. Car malgré la présence d’un pseudo, le formulaire le demande toujours.
Le problème est uniquement pour certain utilisateur d’internet-explorer...
Mais je n’arrive pas à reproduire ce type de problème sur mon PC...
26 avril 2011, 17:54, par tetue
Ouais super ! Ca fait justement partie des évolutions à apporter au Plugin Comments !
21 février 2012, 14:27, par emilieb
les plus dure pb sont se qu’on ne peut pas reproduire !
10 avril 2013, 05:00, par Pat
Pour information, le Couteau Suisse gère désormais le pipeline formulaire_verifier pour sa lame "Pas de forums anonymes" et utilise jQuery pour la cosmétique et les mentions "(obligatoire)" :
http://zone.spip.org/trac/spip-zone/changeset/71880
28 octobre 2013, 19:27, par Laure
Merci !!!!!!