API CFG : #FORMULAIRE_XX - commentaires API CFG : #FORMULAIRE_XX 2009-09-05T20:58:16Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment420245 2009-09-05T20:58:16Z <p>Bonjour,</p> <p>j'utilise un formulaire CVT comportant un textarea. quand les données<br class="autobr"> du formulaire sont erronnées le formulaire doit réafficher<br class="autobr"> le contenu du textarea.<br class="autobr"> le problème est que le texte est parfois réaffiché en utf-8<br class="autobr"> au lieu de l'iso-8859-1, qui est le charset original.</p> <p>ceci se produit quand j'active l'ajax. dans ce cas les données<br class="autobr"> du POST sont recues en utf-8. j'y accède par un _request().<br class="autobr"> celui-ci n'effectue pas toujours la restitution dans le charset original.<br class="autobr"> visiblement c'est la constante _AJAX qui n'est plus à 1 dans ce cas.</p> <p>la fréquence du problème est assez variable. <br class="autobr"> j'ai également observé le problème sur la balise #FORMULAIRE_ECRIRE_AUTEUR<br class="autobr"> typiquement avec les champs mail et sujet vides, et en attendant<br class="autobr"> plusieurs secondes entre les soumissions successives.</p> <p>(je suis en spip 2.07)</p> <p>merci pour vos avis</p> Balise SAISIE et Spip 2.0.9 2009-08-10T16:04:19Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment419198 2009-08-10T16:04:19Z <p>Saisie est devenu un plugin à part, tu peux le récupérer là :<br class="autobr"> <a href="http://files.spip.org/spip-zone/saisies.zip" class="spip_url spip_out auto" rel="nofollow external">http://files.spip.org/spip-zone/saisies.zip</a></p> Balise SAISIE et Spip 2.0.9 2009-08-10T15:53:35Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment419195 2009-08-10T15:53:35Z <p>Bonjour Matthieu,</p> <p>Durant ma migration chez Infomaniak, j'ai installé cfg comme plugin auto or le répertoire «<small class="fine d-inline"> </small>saisie<small class="fine d-inline"> </small>» est absent du paquet auto installable.</p> <p>C'est normal pusque la balise #SAISIE est encore expérimentale. La copie du répertoire "saisie" ancienne versionne semble pas marcher non plus. Je vais chercher s'il existe un zip contenant tout ou mieux pourrais-tu me le faire passer<small class="fine d-inline"> </small>?</p> <p>- Dans SPIP ZONE, tu écris</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>Migration des anciennes saisies -------------------------------- 1) Mettre à jour CFG en version 0.13 minimum 2) ajouter et activer le plugin "saisies" 3) modifier vos squelettes SPIP :</code></pre></div> <p>Je ne trouve nulle part de plugin «<small class="fine d-inline"> </small>saisie<small class="fine d-inline"> </small>». En existe-t-il un ou s'agit-il du déplacement du répertoire «<small class="fine d-inline"> </small>saisie<small class="fine d-inline"> </small>»<small class="fine d-inline"> </small>?</p> <p>Merci</p> <p>Philippe</p> Balise SAISIE et Spip 2.0.9 2009-08-10T15:12:15Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment419193 2009-08-10T15:12:15Z <p>Saisies a évolué (je rappelle qu'il a le statut expérimental) : tu dois mettre à jour CFG et Saisies ET repprendre ton formulaire HTML en t'appuyant sur les exemples de saisies donné dans le répertoire saisies du plugin homonyme :</p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code>[(#SAISIE{type, champ}{option=x}{option=y})] devient : [(#SAISIE{type, champ, option=x, option=y})]</code></pre></div> Balise SAISIE et Spip 2.0.9 2009-08-10T14:55:51Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment419191 2009-08-10T14:55:51Z <p>Bonjour,</p> <p>Mon site hébergé chez Strato étant trop lent, j'ai migré chez Infomaniak à Genève avec une IP fixe pour simplifier les tests avant la redirection des DNS. Infomaniak est beaucoup plus rapide. J'ai encore à déboguer le retout à la racine du site...</p> <p>Je suis passé de Spip 2.0.8 à Spip 2.0.9 ayant lu l'alerte de sécurité récente.</p> <ul class="spip"><li> Là, ça se corse : mes formulaires CVT utilisant la balise #SAISIE ne fonctionnent plus (version de cfg : 1.14.0 [30774] et de Spip Bonux : 1.8.1 [30774]).</li><li> le code source de l'affichage donne : <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><div class="ajax"> <div class="formulaire_spip"> <form method="post" action="spip.php?article5"><div> <div><input name="article5" value="" type="hidden" /> <input name="id_article" value="5" type="hidden" /> <input name="page" value="article" type="hidden" /><input type='hidden' name='formulaire_action' value='selmembres' /><input type='hidden' name='formulaire_action_args' value='FGkk/k3ZMm9PDXhhjF2nqH2XfwmtwTPEqcWMzTn9trs9Q4ImhXbuMZktrc1kCb2xx7GGKI2B6sVpL63Dbg0rfVPd' /></div> <ul> {checkbox,categ} {checkbox,sexe} {checkbox,licence} {radio,tri} </ul> <p class="boutons"> <input class="submit" type="submit" name="valider" value="Valider" /> </p> </div></form></code></pre></div></li></ul> <p>Je n'ai rien changé aux formulaires eux mêmes. Que peut-il se passer<small class="fine d-inline"> </small>?</p> <p>Voir le problème sur le site d'<a href="http://93.88.252.225/spip/spip.php?article5" class="spip_out" rel='nofollow external'>Annemasse Ski Compétition</a></p> <p>Merci</p> <p>Philippe</p> FORMULAIRES CVT - Récupérer une variable après Traitement 2009-06-26T12:44:38Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment417699 2009-06-26T12:44:38Z <p>Un petit « UP » concernant Ajax.</p> <p>Je me suis mal exprimé dans le Post précédent.</p> <p>Si on « ajaxe » le formulaire, les valeurs sont bien affichées à l'écran lors du deuxième passage MAIS dans le code source de la page la « VALUE » des champs est à « ». Dans mon cas précis, le champ <i>nouvel_id</i> créé par la fonction <i>set_request()</i> ne garde alors pas la valeur assignée et donc la méthode ne donne pas le résultat escompté.</p> <p>En ajaxant, chaque validation entraîne une nouvelle création dans la table avec un nouvel Id et non pas une modification de l'enregistrement qui vient d'être créé.</p> <p>Philippe</p> FORMULAIRES CVT - Récupérer une variable après Traitement 2009-06-26T10:44:38Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment417690 2009-06-26T10:44:38Z <p>Bonjour Matthieu,</p> <p>Merci pour cette solution qui marche à merveille.</p> <p>J'ai plusieurs observations : <br>- <strong>Il ne faut pas “ajaxer” le formulaire</strong> faute de quoi, les champs ne sont pas remplis au deuxième passage. J'ai placé : <br class="autobr"> <code class="spip_code spip_code_inline" dir="ltr">[(#ENV*{numero}>{0}|oui)<div class="ajax">] </code> à la première ligne de mon formulaire pour ajaxer le formulaire uniquement en cas de modification. <br>— N.B. mon formulaire HTML NE CONTIENT PAS DE CHAMP NOMME “nouvel_id” <br>— <i>$numero</i> restera toujours égal à zéro après un <i>_request('numero')</i>. <br>— J'arrive sur la page du formulaire avec le paramètre <i>&numero=x</i>. x=0 en cas de création ou x = Id de l'enregistrement à modifier.</p> <p>- concrètement, j'ai utilisé la méthode suivante : <br>— <strong>Fonction Charger :</strong></p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>$numero=_request('numero'); à zéro en cas de création. “nouvel_id” n'existe pas au premier passage. if (_request('nouvel_id')) { $numero=_request('nouvel_id'); contient par la suite l'Id de l'enregistrement en cours. settype($numero, "integer"); } if ($numero>0) { .../... $query = "SELECT * FROM adherents WHERE numero=$numero;" ; .../... while ($row = mysql_fetch_array($resultat, MYSQL_BOTH)) { $nom= $row["nom"]; .../... $valeurs = array('numero'=>$numero, 'nom'=>$nom, .../...) initialisation du formulaire avec les données de la table }else{ if (_request('nouvel_id')) { die("je ne devrais jamais passer ici !"); } $valeurs = array('numero'=>'0', 'nom'=>'', .../...) initialisation du formulaire vide } return $valeurs;</code></pre></div> <p><br>— <strong>Fonction Vérifier : RAS</strong> <br>— <strong>Fonction Traiter : </strong></p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code> $numero=_request('numero'); if (_request('nouvel_id')) { $numero=_request('nouvel_id'); settype($numero, "integer"); } $nom = _request('nom'); .../... if ($numero>0){ $query = "UPDATE .... }else{ $query = "INSERT ... $numero=mysql_insert_id(); } set_request('nouvel_id',$numero); return array('message_ok'=>$message);</code></pre></div> <p>Le set_request va créer un <strong>nouveau champ caché</strong> sur la page HTML ayant comme valeur l'Id de l'enregistrement nouvellement créé ou celui de l'enregistrement en cours.</p> <p><strong>Pour une création dans la table</strong>, mon code va donc faire les choses dans l'ordre suivant :</p> <p>- 1<sup class="typo_exposants">er</sup> passage : affichage d'un formulaire vide (<i>$numero=0</i>) <br>- après validation : création de l'enregistrement dans la table, récupération de l'Id auto incrémenté puis ré affichage du formulaire avec passage dans la fonction Charger. L'Id étant renseigné (“nouvel_id”), l'enregistrement nouvellement créé est relu comme si j'arrivais sur la page du formulaire avec &numero > 0. <br>- apres RE VALIDATION : MODIFICATION de l'enregistrement puis ré affichage <br>- ainsi de suite pour autant de modifications qu'on veut.</p> <p>Je vais creuser un peu autour du fait de ne pas pouvoir ajaxer le formulaire. J'ai peut-être fait une erreur quelque part.</p> <p>Code source de la page HTML au 2<sup class="typo_exposants">e</sup> passage :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code> .../... <form method='post' action='spip.php?article46&amp;id_article=46'> <div> <div><input name="article46" value="" type="hidden" /> <input name="id_article" value="46" type="hidden" /> <input name="nouvel_id" value="472" type="hidden" /> champ créé par la fonction set_request() dans la fonction Traiter .../...</code></pre></div> <p>Si ça peut aider ...</p> <p>Philippe</p> API CFG : #FORMULAIRE_XX 2009-06-25T15:17:18Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment417676 2009-06-25T15:17:18Z <p>Bonjour Phillipe,</p> <p>Peut être que cette solution peut te convenir (expliquée vaguement ici : <a href="http://marcimat.magraine.net/Creer-une-interface-d" class="spip_url spip_out auto" rel="nofollow external">http://marcimat.magraine.net/Creer-une-interface-d</a> dans le paragraphe «<small class="fine d-inline"> </small>Effectuer un traitement par le formulaire CVT<small class="fine d-inline"> </small>») :</p> <ul class="spip"><li> dans le traitement, sauver le nouvel id par <code class="spip_code spip_code_inline" dir="ltr">set_request('nouvel_id',$id_machin);</code></li><li> dans le charger, tester sa présence et agir en conséquence : <code class="spip_code spip_code_inline" dir="ltr">if ($id_machin = _request('nouvel_id')) { .... }</code></li></ul> <p>MM.</p> API CFG : #FORMULAIRE_XX 2009-06-24T06:49:52Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment417643 2009-06-24T06:49:52Z <p>Bonjour,<br class="autobr"> Je reviens chercher de l'aide sur ce Forum.</p> <p>Je ne maîtrise pas encore bien toutes les finesses des formulaires CVT et ma question est la suivante :</p> <p>- Existe-t-il une méthode pour modifier les variables d'environnement dans la fonction “Traiter” d'un formulaire<small class="fine d-inline"> </small>?</p> <p>J'ai un formulaire qui fait les choses suivantes :</p> <ol class="spip"><li> à partir d'une liste, je récupère la clef primaire auto incrémentée d'un enregistrement puis je chaine sur la page du formulaire</li><li> la fonction “Charger” ouvre la base de données, et récupère les données.</li><li> les fonctions “Vérifier” et “Traiter” font les contrôles et l'UPDATE de la base (utilisé par les membres pour modifier leur fiche).</li></ol> <p><strong>Tout fonctionne parfaitement dans ce cas de figure.</strong></p> <p>Je me sert du même formulaire pour <strong>ajouter un enregistrement dans la base</strong> (utilisé par les administrateurs pour créer une fiche).</p> <ol class="spip"><li> Je chaine sur la page avec un Id à zéro</li><li> l'Id à zéro m'indique que je dois initialiser le formulaire à blanc</li><li> les fonctions “Vérifier” et “Traiter” font les contrôles et l'INSERT dans la base.</li></ol> <p>L'idée est de récupérer la valeur du dernier auto incrément par mysql_insert_id () par exemple, ET DE MODIFIER la valeur de <code class="spip_code spip_code_inline" dir="ltr">#ENV{numero}</code> qui deviendrait disponible lors du ré affichage de mon formulaire après validation.<br class="autobr"> Le ré affichage du formulaire se ferait comme si j'arrivais sur la page en chainant l'ID nouvellement créé. Cela me permettrais d'appliquer des filtres sur les balises pour obtenir tel ou tel affichage particulier (chemin vers une photo en combinant le nom et le prénom notamment).</p> <p>Pour le moment, une re validation du formulaire me refait un INSERT étant donné que ma variable d'environnement reste à zéro. Je n'arrive pas à changer quoi que ce soit dans le formulaire comme placer la valeur de l'ID dans un champ caché du formulaire ou dans autre chose. Je n'ai pas encore essayé par la création d'une variable de SESSION mais j'attends une piste avant de me fourvoyer.</p> <p>J'aurais bien une solution mais elle est très lourde :</p> <ol class="spip"><li> Ouvrir une transaction</li><li> faire l'INSERT dans la fonction Vérifier,récupérer la valeur de l'auto incrément puis générer une erreur pour revenir au formulaire.</li><li> Obliger l'utilisateur (moi) à valider à nouveau le formulaire et faire un UPDATE pour rien puis valider la transaction.</li><li> ou annuler la transaction par un moyen à trouver en cas de sortie sans revalidation.</li></ol> <p><strong>Une autre solution consisterait à détourner la fonction Vérifier de son objet principal et de tout faire dans celle-ci sans jamais passer par la fonction Traiter.</strong></p> <p>Dans la mesure où seuls les administrateurs du site font les créations d'enregistrements, ça doit être jouable. Les membres qui modifient leur propre fiche le font par la voie normale sans souci.</p> <p>Pour gagner du temps, j'ai créé mon formulaire en mixant les <code class="spip_code spip_code_inline" dir="ltr">INPUT, SELECT et autres</code> avec des boutons radio et des checkbox de la balise SAISIE. Je ferai tout migrer sur la balise SAISIE au fur et à mesure de la maîtrise que j'en aurai.</p> <p>Merci pour une idée.</p> <p>Philippe</p> API CFG : #FORMULAIRE_XX [Résolu] 2009-05-31T16:01:03Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment416896 2009-05-31T16:01:03Z <p>Bonjour,</p> <p>La cause de mes soucis d'alignement venait du css de mon squelette qui prend la main sur celui de “Spip-Bonux”. <br>- j'avais beau modifier tout ce que je voulais dans le fichier “style_prive_formulaires.html”, rien ne changeait. J'ai donc modifié le fichier “base.css” de Sarka-Spip en incluant la bonne ligne. <br>- le message d'erreur persiste après l'effacement du cache mais on ne va pas y passer 1 seconde car tout rentre dans l'ordre au 2<sup class="typo_exposants">e</sup> affichage de l'article par la remise en cache des pages html du plugin au premier passage. <br>- l'initialisation du formulaire en passant un “array” à la balise #SAISIE marche normalement. J'ai été assez mauvais sur ce coup là<small class="fine d-inline"> </small>! <br>- pour le tri sur plusieurs champs de la base, je vais me pencher sur la fonction que tu indiques. Là encore on ne va pas y passer trop de temps.</p> <p>Merci beaucoup pour le support.</p> <p>Philippe</p> <p>P.S. les fichiers de mon formulaire (à adapter à votre sauce et à renommer, si j'ai le droit de placer les liens ici<small class="fine d-inline"> </small>?) <br>- N.B. C'est la balise #SAISIE qui place les “<code class="spip_code spip_code_inline" dir="ltr"><li></code>” et “<code class="spip_code spip_code_inline" dir="ltr"></li></code>” dans le formulaire.</p> <p>télécharger : <a href="http://www.asc-annemasse.com/spipx/IMG/txt/selmembres-html.txt" class="spip_out" rel='nofollow external'>le formulaire html</a> et <br class="autobr"> <a href="http://www.asc-annemasse.com/spipx/IMG/txt/selmembres-php.txt" class="spip_out" rel='nofollow external'>le fichier php des fonctions CVT</a></p> API CFG : #FORMULAIRE_XX [4/5 résolu] 2009-05-30T10:29:25Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment416855 2009-05-30T10:29:25Z <p>Philippe,</p> <p>Pour l'affichage en liste / en ligne, dans le CSS de SPIP Bonux est indiqué :</p> <div class="precode"><pre class="spip_code spip_code_block language-css" dir="ltr" style="text-align:left;" data-language="css"><code>/* * La liste par defaut est verticale * pour l'avoir horizontale, il faut specifier : * .formulaire_spip .formulaire_editer .editer_qqc .champ{display:inline;} */</code></pre></div> <p>Dans ton cas, ça peut être, je suppose :</p> <div class="precode"><pre class="spip_code spip_code_block language-css" dir="ltr" style="text-align:left;" data-language="css"><code>.formulaire_spip .editer_categ .choix {display:inline;}</code></pre></div><hr class="spip"> <p><cite><br class="autobr"> Erreur(s) dans le squelette<br class="autobr"> 1 Erreur sur le site boucle critère inconnu categ<br class="autobr"> </cite></p> <p>Aucune idée, ta boucle a l'air correcte pourtant...</p> <hr class="spip"> <p>Pour la saisie « par nom, prenom » je vois pas trop comment faire (et j'ai pas trop envie là de réfléchir<small class="fine d-inline"> </small>!)... Faut certainement dans la fonction charger analyser _request('tri') et faire des choses en conséquance pour remplir correctement $valeurs.</p> <hr class="spip"> <p>Pour les chargements par défaut : 2 possibilités :</p> <p>1) la fonction charger (mais c'est un array qu'il faut, pas une liste à virgule pour la boucle POUR) :</p> <div class="precode"><pre class="spip_code spip_code_block language-php" dir="ltr" style="text-align:left;" data-language="php"><code>function formulaires_selmembres_charger_dist(){ $valeurs = array('categ'=>array('microbe','poussin','benjamin','minime','cadet','junior','tous'), 'sexe'=>array('H','L'), 'licence'=>array('2','1'), 'tri'=>'nom'); return $valeurs; }</code></pre></div> <p>2) le parametre defaut, et IDEM, si tu as plus d'un élément, c'est un array qu'il faut :</p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code>{defaut=#ARRAY{0,microbe,1,poussin,2,bajamin}}</code></pre></div><hr class="spip"> <p>Bon courage.</p> API CFG : #FORMULAIRE_XX [4/5 résolu] 2009-05-30T09:51:01Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment416853 2009-05-30T09:51:01Z <p>Bonjour Marcimat,</p> <p>Merci pour cette balise SAISIE. Tout est devenu beaucoup plus simple tout d'un coup.</p> <p>J'ai plusieurs observations : <br>- étant donné que l'on est plus dans un contexte <code class="spip_code spip_code_inline" dir="ltr"><ul> <li></code>, j'ai du mal à personnaliser l'affichage des items des balises SAISIE. Le code de la boucle POUR de spip Bonux les affichant :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_radio(POUR){tableau #ENV{datas}}> <div class="choix"> <input type="checkbox" name="#ENV{nom}[]" class="checkbox" id='champ_#ENV{nom}_#COMPTEUR_BOUCLE' [(#CLE|in_any{[(#ENV{valeur}|sinon{#GET{defaut}})]}|oui)checked='checked'] value='#CLE' /> <label for="champ_#ENV{nom}_#COMPTEUR_BOUCLE">#VALEUR</label> </div> </BOUCLE_radio></code></pre></div> <p>permet-il l'affichage sur une même ligne (du style .choix <i>display:inline<small class="fine d-inline"> </small>;</i>)<small class="fine d-inline"> </small>? Peut être par un style float<small class="fine d-inline"> </small>? <br>- Le vidage du cache (ou le recalcul de la page) génère chez-moi une erreur de squelette dans la construction de la boucle lors du premier affichage du formulaire suivant le vidage. Pour mon exemple (voir les posts plus bas), le critère “categ” est inconnu dans la requête SQL générée. Je ne comprends pas pourquoi. C'est comme si Spip évaluait ma boucle avant le chargement des pages cfg/saisies du plugin. <strong>Je précise que tous mes tests se font «<small class="fine d-inline"> </small>en grandeur<small class="fine d-inline"> </small>» sur le site hébergé.</strong>. Par la suite il doit les trouver dans le cache.</p> <p>message d'erreur :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>Erreur(s) dans le squelette 1 Erreur sur le site boucle critère inconnu categ</code></pre></div> <p><br>- Dans la balise SAISIE qui sert pour faire mon tri,</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#SAISIE{radio,tri} {label=Tri} {defaut=nom} {datas=#ARRAY{ nom,Par nom, annee,Par âge,}})]</code></pre></div> <p>, serait-il possible de permettre une chaine de caractère au lieu d'un mot unique. L'idée serait de remplacer dans l'exemple ci-dessus, «<small class="fine d-inline"> </small>nom<small class="fine d-inline"> </small>» par «<small class="fine d-inline"> </small>nom prenom<small class="fine d-inline"> </small>» de façon à pouvoir trier sur plusieurs critères. <br>- Je n'arrive toujours pas à initialiser le formulaire avec des critères par défaut. Comment faudrait-il faire pour que ma boucle affiche le formulaire en arrivant sur la page comme si toutes les cases étaient cochées<small class="fine d-inline"> </small>? Les lignes <i>default=xxx</i> des balises saisie ne changent rien. Ici encore ma boucle doit être interprétée avant le chargement et le traitement des balises SAISIE. <br>— ma fonction charger :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>function formulaires_selmembres_charger_dist(){ $valeurs = array('categ'=>'microbe,poussin,benjamin,minime,cadet,junior,tous', 'sexe'=>'H,L', 'licence'=>'2,1', 'tri'=>'nom'); return $valeurs; }</code></pre></div> <p>Le code de ma boucle suivant le <code class="spip_code spip_code_inline" dir="ltr"></form></code> est devenu plus simple :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_adherents(adherents categories) {categ IN #ENV**{categ}}{sexe IN #ENV**{sexe}}{licence IN #ENV**{licence}} {par #ENV**{tri}}{inverse #GET{senstri}}> <tr class="[(#COMPTEUR_BOUCLE|alterner{'row_even','row_odd'})]"> <td>#NOM</td> .../...> </tr> </BOUCLE_adherents></code></pre></div> <p>Encore merci pour le plugin.<br class="autobr"> Philippe</p> <p>P.S. Pour ceux qui voudraient voir le formulaire en action, le numéro de mon article à changé à la suite d'une réinstallation totale de Spip (plantage massif avec la dernière version svn à cause de l'absence de définition de certains filtres d'images et donc incompatibilité avec mon squelette). Je n'ai pas pu m'en sortir autrement que par un vidage de la base et effacement des répertoires. La version Spip 2 (2.0.8 à la date du post) de mon site tourne dans le sous-domaine spip.asc-annemasse.com et le lien pour y aller est <a href="http://spip.asc-annemasse.com/index.php" class="spip_out" rel='nofollow external'>ICI</a>. L'article «<small class="fine d-inline"> </small>Liste des membres<small class="fine d-inline"> </small>» se trouve dans la rubrique "Qui sommes-nous".</p> API CFG : #FORMULAIRE_XX - au 3/4 résolu 2009-05-27T19:14:34Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment416759 2009-05-27T19:14:34Z <p>Bonjour Philippe,</p> <p>Quelques points qui pourront t'aider :</p> <ul class="spip"><li> Préférer une écriture standard de SPIP 2 pour les formulaires que tu écris (voir <a href="http://programmer.spip.org/-Les-formulaires" class="spip_url spip_out auto" rel="nofollow external">http://programmer.spip.org/-Les-formulaires</a>), notamment un enchainement UL/LI avec éventuellement des fieldset.</li><li> Pour le tri tu peux utiliser <code class="spip_code spip_code_inline" dir="ltr">{par #ENV{mon_tri} #GET{sens}}</code> en calculant le sens en fonction de mon_tri : <code class="spip_code spip_code_inline" dir="ltr">[(#SET{sens,[(#ENV{mon_tri}|=={nom}|?{0,1})]})]</code></li></ul> <p>Si tu utilises une écriture de formulaires comme le prévoit SPIP 2.0, tu peux essayer la balise #SAISIE de CFG (non documentée car encore en test). Notamment la saisie « checkbox » (nécessite aussi SPIP Bonux) que je viens juste de t'ajouter (version CFG 1.12.5) (<a href="http://zone.spip.org/trac/spip-zone/changeset/28852" class="spip_url spip_out auto" rel="nofollow external">http://zone.spip.org/trac/spip-zone/changeset/28852</a>), que tu peux utiliser de la sorte :</p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code><div class="formulaire_spip"> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] <form method="post" action="#ENV{action}"><div> #ACTION_FORMULAIRE{#ENV{action}} <h3 class="legend">Filtrage des membres</h3> <ul> [(#SAISIE{checkbox,categ} {label=Catégorie} {datas=#ARRAY{ microbes,Microbes, poussin,Poussin, cadet,Cadet, junior,Junior, }})] [(#SAISIE{checkbox,sexe} {label=Sexe} {datas=#ARRAY{ H,Garçon, F,Fille, }})] [(#SAISIE{checkbox,licence} {label=Sexe} {datas=#ARRAY{ 2,Licences, 1,C. Neige, }})] [(#SAISIE{radio,tri} {label=Tri} {defaut=nom} {datas=#ARRAY{ nom,Par nom, annee,Par âge, }})] </ul> <p class="boutons"> <input class="submit" type="submit" name="valider" value="Valider" /> </p> </div></form> ... ta boucle ... </div></code></pre></div> <p>Enfin, attention dans ton code à bien fermer des <code class="spip_code spip_code_inline" dir="ltr"><input></code> car certains ont : <code class="spip_code spip_code_inline" dir="ltr"><input ... / ></code> avec un espace entre / et > ...</p> <p>Dernière chose : le plugin Bonux a aussi un critère <i>tri</i> exprès pour trier... mais je n'ai pas joué avec encore...</p> API CFG : #FORMULAIRE_XX - au 3/4 résolu 2009-05-27T17:49:08Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment416756 2009-05-27T17:49:08Z <p>Merci Marcimat (Matthieu) pour ces explications,</p> <p>J'ai à peu près fait le tour de la question et je n'ai pas trouvé de solution aux trois choses suivantes : <br>- initialiser le formulaire, quoique je mette dans la «<small class="fine d-inline"> </small>fonction charger<small class="fine d-inline"> </small>» <br>- conserver les valeurs des cases à cocher lors du ré affichage du formulaire <br>- récupérer et utiliser directement la valeur de la case à cocher pour l'ordre de tri. Je suis passé par une boucle condition de spip-bonux (encore merci).</p> <p>L'ajaxisation du formulaire est par ailleurs obligatoire sous peine d'avoir un vilain message d'avertissement causé par les tableaux d'input. <br>- Je place ci-dessous mes codes qui pourront donner des idées à ceux qui pataugent.</p> <p>le résultat est visible sur mon site en migration (<a href="http://spip.asc-annemasse.com/spip.php?article16" class="spip_out" rel='nofollow external'>suivez ce lien</a>).</p> <p>Encore merci.</p> <p>Philippe</p> <p>mon formulaire :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><div class="ajax"> <div class="formulaire_spip formulaire_selmembres"> [<p class='formulaire_erreur'>(#ENV*{message_erreur})</p>] <form action='#ENV{action}' method='post'> #ACTION_FORMULAIRE{#ENV{action}} <hr> <table class="spip"> <thead> <tr class='row_first'> <th scope="col" colspan="4" style="text-align: center"><strong class="spip">Filtrage des membres</strong></th> </tr> <tbody> <tr class="row_even"> <td > <input type="checkbox" name=categ[] value="microbe" class="checkbox" / > Microbes</td> <td> <input type="checkbox" name=categ[] value="poussin" class="checkbox" /> Poussins</td> ... </tr> <tr class="row_even"> <td> <input type="checkbox" name=categ[] value="cadet" class="checkbox" / > Cadets</td> <td> <input type="checkbox" name=categ[] value="junior" class="checkbox" /> Juniors</td> ... </tr> <tr> <td colspan="4"><hr></td> </tr> <tr class="row_even"> <td> <input type="checkbox" name=sexe[] value="H" class="checkbox" /> Garçons </td> <td> <input type="checkbox" name=sexe[] value="L" class="checkbox" /> Filles </td> <td> <input type="checkbox" name=licence[] value="2" class="checkbox" /> Licences </td> <td> <input type="checkbox" name=licence[] value="1" class="checkbox" /> C.Neige </td> </tr> <tr class="row_even"> <td colspan="2"> <input type="radio" name=tri[] value="0" class="radio" checked /> Tri par Noms</td> <td colspan="2"> <input type="radio" name=tri[] value="1" class="radio" /> Tri par Age</td> </tr> <tr class="row_even" > <td class="boutons" colspan="4"><center><input class="submit" type="submit" name="valider" value="Valider" /></center> </td> </tr> </tbody> </table> </form> <table class="spip" width="100%"><thead> <tr class="row_first" style="text-align: center"><th scope='col'><strong class="spip">Nom</strong></th><th scope='col'><strong class="spip">Pr&eacute;nom</strong></th><th scope='col'><strong class="spip">Ann&eacute;e</strong></th><th scope='col'><strong class="spip">Categ.</strong></th><th scope='col'><strong class="spip">Titre FFS</strong></th><th scope='col'><strong class="spip">Sexe</strong></th></tr> [(#SESSION{statut}=={'0minirezo'}|ou {#SESSION{statut}=={'6forum'}}) <tr class='row_first'><th scope='col'><strong class="spip">Rue</strong></th><th scope='col'><strong class="spip">Suite</strong></th><th scope='col'><strong class="spip">C.postal</strong></th><th scope='col'><strong class="spip">Ville</strong></th><th scope='col'><strong class="spip">Portable</strong></th><th scope='col'><strong class="spip">Tel.</strong></th></tr>] <tbody> <BOUCLE_triee(POUR){tableau #ENV*{tri}}> <BOUCLE_test12(CONDITION){si #VALEUR|={0}}> <BOUCLE_adherents1(adherents categories) {categ IN #ENV*{categ}}{sexe IN #ENV*{sexe}}{licence IN #ENV*{licence}} {par annee}{inverse}{par nom, prenom}{"----"}> <tr class="[(#COMPTEUR_BOUCLE|alterner{'row_even','row_odd'})]"> [(#SESSION{statut}=={'0minirezo'}|ou {#SESSION{statut}=={'6forum'}}) <td><a href="http://www.asc-annemasse.com/spip/spip.php?article24&numero=#NUMERO&var_mode=recalcul">#NOM</a></td> ] [(#SESSION{statut}|strlen|=={0}|oui) <td>#NOM</td>] <td>[(#PRENOM|chainespg::car1majuscule)]</td><td>#ANNEE</td><td>#CATEGLIB</td><td>[(#NUMERO_LICENCE|chainespg::lienlicence{#NOM, #PRENOM})] [(#NUMERO_CARTENEIGE|chainespg::lienlicence{#NOM, #PRENOM})]</td><td>[(#SEXE|=={H}|oui)Homme][(#SEXE|=={H}|non)Dame]</td> </tr> [(#SESSION{statut}=={'0minirezo'}|ou {#SESSION{statut}=={'6forum'}}) <tr class="[(#COMPTEUR_BOUCLE|alterner{'row_even','row_odd'})]"> <td>#ADRESSE1</td><td>#ADRESSE2</td><td>#CODE_POSTAL</td><td>#VILLE</td><td>#PORTABLE</td><td>#TELEPHONE1</td> </tr>] </BOUCLE_adherents1> </BOUCLE_test12> <BOUCLE_adherents2(adherents categories) {categ IN #ENV*{categ}}{sexe IN #ENV*{sexe}}{licence IN #ENV*{licence}} {par nom, prenom}> <tr class="[(#COMPTEUR_BOUCLE|alterner{'row_even','row_odd'})]"> [(#SESSION{statut}=={'0minirezo'}|ou {#SESSION{statut}=={'6forum'}}) <td><a href="http://www.asc-annemasse.com/spip/spip.php?article24&numero=#NUMERO&var_mode=recalcul">#NOM</a></td> ] [(#SESSION{statut}|strlen|=={0}|oui) <td>#NOM</td>] <td>[(#PRENOM|chainespg::car1majuscule)]</td><td>#ANNEE</td><td>#CATEGLIB</td><td>[(#NUMERO_LICENCE|chainespg::lienlicence{#NOM, #PRENOM})] [(#NUMERO_CARTENEIGE|chainespg::lienlicence{#NOM, #PRENOM})]</td><td>[(#SEXE|=={H}|oui)Homme][(#SEXE|=={H}|non)Dame]</td> </tr> [(#SESSION{statut}=={'0minirezo'}|ou {#SESSION{statut}=={'6forum'}}) <tr class="[(#COMPTEUR_BOUCLE|alterner{'row_even','row_odd'})]"> <td>#ADRESSE1</td><td>#ADRESSE2</td><td>#CODE_POSTAL</td><td>#VILLE</td><td>#PORTABLE</td><td>#TELEPHONE1</td> </tr>] </BOUCLE_adherents2> <//B_test12> </BOUCLE_triee> </tbody> </table> </div> </div> </code></pre></div> <p>mon fichier de fonctions :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><?php function formulaires_selmembres_charger_dist(){ $valeurs = array('categ'=>'', 'sexe'=>'', 'licence'=>'', 'tri'=>''); return $valeurs; } function formulaires_selmembres_verifier_dist(){ $erreurs = array(); $erreurs['message_erreur']= ' '; return $erreurs; } function formulaires_selmembres_traiter_dist(){ $erreurs = array(); return $erreurs; } ?></code></pre></div> API CFG : #FORMULAIRE_XX 2009-05-21T07:10:28Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment416590 2009-05-21T07:10:28Z <p>Pour ton cas, ça ne me semble pas si difficile que cela... en plus, tu n'as pas besoin de traitement en base de donnée, juste de faire une sélection sur ta boucle qui affiche ton tableau...</p> <p>En gros : tu as article 15 qui appelle <code class="spip_code spip_code_inline" dir="ltr"><formulaire|xx></code> ou même si tu le souhaites <code class="spip_code spip_code_inline" dir="ltr"><div class="ajax"><formulaire|xx></div></code>.</p> <p>Ce formulaire serait dans le fichier : formulaires/xx.html et formulaires/xx.php. La fonction charger retournerait l"environnement attendu (variables « sexe » et « categorie » par exemple). La fonction verifier() renverrait toujours une erreur ($erreurs['message_erreur'] = « »<small class="fine d-inline"> </small>; pour faire réafficher systématiquement le formulaire - puisqu'il n'y a aucun traitement à effectuer, juste une sélection).</p> <p>Les checkbox auraient des name=«<small class="fine d-inline"> </small>yy[]<small class="fine d-inline"> </small>», « zz[] » où yy est le nom du champ de la table SQL... Ensuite, c'est un petit tour de passe passe dans le html du formulaire :</p> <div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code><div class="formulaire_spip"> <form...><div>#ACTION_FORMULAIRE{#ENV{action}} ... les checkbox ... </div></form> ... ici la boucle ... <BOUCLE_selection_ski(SKIEURS){yy IN #ENV{yy}}{zz IN #ENV{zz}} {!par date}> </BOUCLE> </div></code></pre></div> <p>Tout consiste ensuite à passer au formulaire une syntaxe correcte au #ENV<i>yy</i> en absence de checkbox cochée : il suffit de définir les valeurs par défaut dans le charger à « .* » et ça devrait rouler...</p> API CFG : #FORMULAIRE_XX 2009-05-21T06:47:38Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment416588 2009-05-21T06:47:38Z <p>J'ai malheureusement le même problème que toi, Philippe. Et j'aimerais de plus modifier une ou des tables externes (DELETE, UPDATE, INSERT). Pourtant les fonctions spip existent, mais comment les utiliser<small class="fine d-inline"> </small>? Je ne sais pas. Je cherche de la doc moi aussi...</p> API CFG : #FORMULAIRE_XX 2009-05-15T16:14:17Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment416452 2009-05-15T16:14:17Z <p>Bonjour, <br>- Je ne poste certainement pas au bon endroit mais je cherche de l'aide partout, je tourne en rond depuis plusieurs semaines sans trouver de solutions. <br>- Je souhaite faire un formulaire CVT pour construire une requête sur une table externe (membres du club).</p> <p>J'ai essayé la méthode suivante : <br>- je place <code class="spip_code spip_code_inline" dir="ltr"><article|xxx></code> dans un article : cela appelle le modèle correspondant. <br>- dans le modèle en question, je place la ligne : <code class="spip_code spip_code_inline" dir="ltr">#FORMULAIRE_SELMEMBRES</code> qui appelle mon formulaire.</p> <p>mon formulaire est conforme au tutorial des formulaires CVT par l'exemple (avec les 3 fonctions dans selmembres.php).</p> <p>L'idée est la suivante : <br>- Récupérer les données (cases à cocher) du formulaire. Je sais le faire jusqu'à la fonction « formulaires_selmembres_traiter_dist() ». <br>- Je sais faire un traitement à l'intérieur de la fonction mais je ne sais pas revenir à l'affichage de la page en récupérant le résultat du traitement de la fonction pour afficher les enregistrements filtrés de la base. Le seul moyen que j'ai trouvé pour récupérer le résultat de la fonction consiste à le mettre dans « message_ok ».</p> <p>Je ne vois pas la solution.</p> <p>En résumé : article -> modèle -> formulaire -> traitement dans la fonction « formulaires_selmembres_traiter_dist() ». -> retour au modèle -> affichage des enregistrements filtrés soit par php ou mieux par une boucle.</p> <p>J'imagine que la puissance de la modélisation associée au formulaire CVT doivent être capable de faire cela.</p> <p>Merci pour le support.<br class="autobr"> Philippe</p> <p>P.S. sous Spip 1.9 et tout en php : <a href="http://www.asc-annemasse.com/spip/spip.php?article15" class="spip_url spip_out auto" rel="nofollow external">http://www.asc-annemasse.com/spip/spip.php?article15</a> (opérationnel)</p> <p>en migration sous Spip 2 avec formulaire CVT : <a href="http://spip.asc-annemasse.com/spip.php?article16" class="spip_url spip_out auto" rel="nofollow external">http://spip.asc-annemasse.com/spip.php?article16</a> (je galère)</p> API CFG : #FORMULAIRE_CFG 2008-07-16T15:52:18Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment407501 2008-07-16T15:52:18Z <p>Mise à jour de la documentation le 16 juillet : <br>- <code class="spip_code spip_code_inline" dir="ltr">#FORMULAIRE_CFG{x}</code> disparait au profit de <code class="spip_code spip_code_inline" dir="ltr">#FORMULAIRE_X</code> directement (cfg 1.9 / spip 2.0 dev svn)</p> API CFG : #FORMULAIRE_CFG 2008-06-09T14:08:23Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment406750 2008-06-09T14:08:23Z <p>Non, ça n'a rien changé : il est devenu possible de n'avoir qu'un seul fichier regroupant les 3 fonctions et appelé <code class="spip_code spip_code_inline" dir="ltr">formulaires/nom.php</code> si le fond s'appelle <code class="spip_code spip_code_inline" dir="ltr">formulaires/nom.html</code></p> API CFG : #FORMULAIRE_CFG 2008-06-09T06:53:31Z https://files.spip.org/API-CFG-FORMULAIRE_XX#comment406731 2008-06-09T06:53:31Z <p>S'lt</p> <p>La gestion CVT a changé, il n'y a plus qu'un seul fichier maintenant qui traite les 3 aspects de CVT.</p>