j’essaie de suivre la méthode de Marcimat pour ajouter des champs extras au formulaire d’inscription à la newsletter :
Je passe donc via un plugin indépendant mais, avec NoSpam activé, j’ai une erreur lorsque je valide le formulaire avec champ extra : « Impossible de prendre en compte votre message. Merci de le soumettre à nouveau ! »
Si je supprime le champ extra, ça refonctionne.
Est-ce qu’il faut redéclarer qqch à NoSpam quand il y a un champ extra ?
De ce que vois sur les var_dump, le pipeline est tout pourri, au lieu d’avoir uniquement un args et un data il a plein d’autres choses, résultat en sortie tout reste au lieu que le champs data soit extrait du pipeline.
Je suspecte donc que tu y mets des choses qui ne vont pas au mauvais endroit dans ton plugin cform.
Mais si tu ne postes pas ton code quelque part on pourra pas t’aider beaucoup plus…
--
Cédric
Le 4 sept. 2019 à 2:32 PM +0200, Jean Marie Grall <jeanmarie.listes@cousumain.info>, a écrit :
Merci à tous les 2 pour vos pistes.
Le 04/09/2019 à 12:08, Maïeul a écrit :
> sans doute le "bug" connu de la trop grande sucession d'#INCLURE. Il faut préferer des <INCLURE>
Je fais mes tests avec la dist et le minimum de plugins activés : Newsletter / Champs extras / NoSpam et leurs dépendances + le plugin CForm (Mailsubscribers - SPIP-Contrib)
Donc à priori pas d'inclures surnuméraires...
Le 04/09/2019 à 13:23, Matthieu Marcillaud a écrit :
> Ça serait pas un oubli de déclaration de <necessite> ou <utilise> sur ton plugin pour que l’un passe avant l’autre ? (je dis ça au pif)
J'ai essayé :
<necessite nom="nospam" compatibilite="[1.6.0;]" />
c'est pas mieux... Comment savoir qui passe en 1er ?
A partir du moment où j’active CForm, il y a 2 choses qui changent (en plus de l'apparition des champs extras) :
- NoSpam ne laisse plus passer le formulaire car il n'y a pas inséré le jeton
- le champ adresse n'affiche plus mon adresse comme si session_email n'était plus dispo dans l'environnement
L'environnement avec CForm : http://spip.pastebin.fr/58134
L'environnement sans CForm : http://spip.pastebin.fr/58135
jean marie
----
spip-zone@rezo.net - https://listes.rezo.net/mailman/listinfo/spip-zone
Entre temps, je pense avoir compris une partie du problème.
La fonction "pipeline()" qui est utilisée par SPIP a un retour différent en fonction du nombre d’éléments dans le tableau qu’elle reçoit. S’il y a 2 éléments et la clé 'data' (args + data le plus souvent), elle ne retourne que le contenu de 'data'.
Dans le pipeline charger de l’exemple indiqué de cform, on insère les saisies à la racine directement, ce qui me semble faux (on obtient args + data + _champs_extras_saisies), ce qui modifie le retour de 'pipeline', tout en insérant la clé pour les saisies a priori au mauvais endroit.
Tentes avec cette correction ( ['data'] en plus sur l’affectation des saisies) :
function cform_formulaire_charger($flux) {
if ($flux['args']['form'] == 'newsletter_subscribe') {
include_spip('inc/cextras');
if ($saisies = cextras_obtenir_saisies_champs_extras('mailsubscribers')) {
$flux['data']['_champs_extras_saisies'] = $saisies;
}
}
return $flux;
}
MM.
Le 04/09/2019 à 14:58, Matthieu Marcillaud a écrit :
Le 04/09/2019 à 15:28, Matthieu Marcillaud a écrit :
Entre temps, je pense avoir compris une partie du problème.
La fonction "pipeline()" qui est utilisée par SPIP a un retour différent en fonction du nombre d’éléments dans le tableau qu’elle reçoit. S’il y a 2 éléments et la clé 'data' (args + data le plus souvent), elle ne retourne que le contenu de 'data'.
Dans le pipeline charger de l’exemple indiqué de cform, on insère les saisies à la racine directement, ce qui me semble faux (on obtient args + data + _champs_extras_saisies), ce qui modifie le retour de 'pipeline', tout en insérant la clé pour les saisies a priori au mauvais endroit.
Tentes avec cette correction ( ['data'] en plus sur l’affectation des saisies)
Bien vu, c'est ça !
Avec cette correction, le formulaire affiche bien mon adresse (car je suis connecté) et NoSpam lui ajoute bien le jeton, donc les inscriptions fonctionnent.
Merci pour le SAD Je vais corriger sur le forum histoire de faire propre... ou même un petit tuto ?