Afficher le label des réponses d’un formulaire
d’après Formidable, le générateur de formulaires
Pour afficher le label des réponses dans les réponses d’un formulaires, il faut :
- Boucler sur la table spip_formulaire/ *input_1 ou votre valeur à vous
<BOUCLE_spip_formulaires(FORMULAIRES)>
[<p>(#SAISIES|unserialize|trouver_ma_saisie{input_1}|table_valeur{options/label})</p>]
</BOUCLE_spip_formulaires>
- Mettre la fonction créée par marcimat (un grand merci) dans mes_fonctions.php
// Recupérer le label d'une saisie formidable
function trouver_ma_saisie($saisies, $champ) {
include_spip('inc/saisies');
if (!is_array($saisies)) {
$saisies = unserialize($saisies);
}
if (!$saisies) {
return false;
}
$saisie = saisies_chercher($saisies, $champ);
return $saisie;
}
Possibilité aussi d’utiliser tout simplement la fonction “saisies_chercher”, ce qui dispense d’ajouter la fonction “trouver_ma_saisies” dans le fichier “mes_options.php”:
<BOUCLE_spip_formulaires(FORMULAIRES)>
[<p>(#SAISIES|unserialize|saisies_chercher{input_1}|table_valeur{options/label})</p>]
</BOUCLE_spip_formulaires>
- Pour afficher les réponses, mais c’est déjà documenté :
<BOUCLE_spip_formulaires_reponses(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}{nom=input_1}>
[<p>(#VALEUR)</p>]
</BOUCLE_spip_formulaires_reponses>
Afficher les résultats d’un formulaire par question et non par réponse (grouper toutes les réponses d’une question ensemble)
<BOUCLE_formidable_id_form(FORMULAIRES){id_formulaire=#ENV{id}}>
<BOUCLE_saisies(DATA){source tableau,#SAISIES|unserialize}>
[(#SET{nom_saisie,[(#VALEUR|table_valeur{options/nom})]})]
<B_spip_formulaires_rep>
[<h3>
(#VALEUR|table_valeur{options/label})
</h3>]
<div class="reponses_form reponse[(#GET{nom_saisie})]">
<BOUCLE_spip_formulaires_rep(FORMULAIRES_REPONSES){id_formulaire}{!par id_formulaires_reponse}{pagination 10 [(#GET{nom_saisie})]}>
<div>
<h4>[Réponse N° (#ID_FORMULAIRES_REPONSE)][ - (#MAJ|affdate)]</h4>
[(#VOIR_REPONSE{[(#GET{nom_saisie})], valeur_uniquement})]
</div>
</BOUCLE_spip_formulaires_rep>
[[<p>Il y a au total #GRAND_TOTAL contributions, cette liste en affiche (#TOTAL_BOUCLE)</p>]
<div class="pagination">(#PAGINATION{page_precedent_suivant})</div>]
</div>
</B_spip_formulaires_rep>
</BOUCLE_saisies>
</BOUCLE_formidable_id_form>
Modèle <formulaires_reponse>
Formidable Présentation aux Grottes (2010)
Pour afficher les résultats dans spip, formidable fournit un modèle “formulaires_reponse”.
Il est également possible d’aller chercher les résultats pour les présenter de la manière voulue :
<b_numero_reponse>
<ul>
<boucle_numero_reponse(spip_formulaires_reponses)>
<li>reponse #ID_FORMULAIRE_REPONSE : <br>
<boucle__reponses_champ1 (spip_formulaires_reponses_champs){nom=textarea_1}>#VALEUR</boucle_reponse_champ1>
-
<boucle__reponses_champ2 (spip_formulaires_reponses_champs){nom=textarea_2}>#VALEUR</boucle_reponse_champ2>
-
<boucle__reponses_champ3 (spip_formulaires_reponses_champs){nom=input_1}>#VALEUR</boucle_reponse_champ3>
</li>
</boucle_numero>
</ul>
</b_numero_reponse>
Il faut alors connaitre le nom interne de chaque champ dans le formulaire concerné : input_1, ...
Depuis la version 2.6.0, il existe aussi la balise #VOIR_REPONSE{champ}
.
C’est par contre plus compliqué pour faire directement à partir du name du champ car la correspondance avec le nom internet passe par une sérialisation dans le champ saisies de la table spip_formulaires. A moins qu’il n’y ait un filtre standard pour faire la correspondance...
Récupérer les fichiers téléversés par un auteur
frederic expérimente le nouveau champ “fichiers” du plugin formidable, remercie sur la liste user les contributeurs de cette nouvelle fonctionnalité, et partage sa recherche et demande s’il y a une meilleure méthode :
Je cherche à récupérer dans un squelette la liste des fichiers d’une réponse à un formulaire qui contiendrait un ou plusieurs champs fichiers. L’objectif est de pouvoir consolider dans une archive zip (à l’aide du plugin zippeur), tous les fichiers qu’un même utilisateur (identifié par son login) aurait téléversé sur un ou plusieurs formulaires qui peuvent contenir eux même un ou plusieurs champs « fichiers ». Zippeur a besoin d’un tableau des fichiers incluant leur chemin relatif.
Pour construire ce tableau :
- ces fichiers sont stockés dans le dossier
config/fichiers/formidable/formulaire_<numéro-du-formulaire>/reponse_<numéro-de-réponse>/fichiers_<numéro-du-champ-fichiers>
, donc je pense pouvoir reconstruire cette arborescence en bouclant sur les réponses des formulaires avec un filtre id_auteur.Il reste à récupérer le nom des fichiers qui sont enregistrés dans le champs « valeur » de la table « spip_formulaires_reponses_champs » au format sérialisé comme dans l’exemple ci-dessous :
a:1: { i: 0; a:4: { s: 6: "taille"; i: 85034; s: 4: "mime"; s: 10: "image/jpeg"; s: 3: "nom"; s: 15: "nom_fichier.jpg"; s: 9: "extension"; s: 3: "jpg"; } }
En supposant qu’on impose une limite d’un seul fichier par champ « fichiers », je peux récupérer le nom de fichier via cette balise :
[(#VALEUR|unserialize|table_valeur{0/nom})]
Le chemin complet avec le nom :
[config/fichiers/formidable/formulaire_#ID_FORMULAIRE/reponse_#ID_FORMULAIRES_REPONSE/#NOM/(#VALEUR|unserialize|table_valeur{0/nom})]
Pour quand même d’envisager le cas de plus d’un fichier par champ, on peut utiliser une boucle POUR sur le résultat de la deserialization. Du coup, pour couvrir le cas de 2 champs fichiers avec plusieurs fichiers, le code devient :
<BOUCLE_formidable_id_form(FORMULAIRES) {identifiant=<identifiant_du_formulaire>}>
<BOUCLE_spip_formulaires_rep(FORMULAIRES_REPONSES) {id_formulaire}{id_auteur <id_auteur>}>
<p>liste des fichiers téléversés dans les champs fichiers_1 et fichiers_2:<p>
<BOUCLE_spip_reponses(FORMULAIRES_REPONSES_CHAMPS) {id_formulaires_reponse=
#ID_FORMULAIRES_REPONSE}{nom IN fichiers_1, fichiers_2}>
<BOUCLE_liste_fichiers(POUR) {tableau #VALEUR}>
<br/>
config/fichiers/formidable/formulaire_#ID_FORMULAIRE/reponse_#ID_FORMULAIRES_REPONSE/#NOM/[(#VALEUR|table_valeur{nom})]
</BOUCLE_liste_fichiers>
</BOUCLE_spip_reponses>
</BOUCLE_spip_formulaires_rep>
</BOUCLE_formidable_id_form>
Après quelques travaux, la dernière version de boucle qui renvoie le chemin des fichiers téléversés
dans un plusieurs champ “fichiers” dans une réponse à un formulaire “formisable” est :
<BOUCLE_spip_reponses
(FORMULAIRES_REPONSES_CHAMPS) {id_formulaires_reponse=#ID_FORMULAIRES_REPONSE}{nom IN fichiers_1, fichiers_2}>
<BOUCLE_liste_fichiers(POUR) {tableau #VALEUR}>
<br>#EVAL{_DIR_FICHIERS_FORMIDABLE}formulaire_#ID_FORMULAIRE/reponse_#ID_FORMULAIRES_REPONSE/#NOM/[(#VALEUR|table_valeur{nom})]
</BOUCLE_liste_fichiers>
</BOUCLE_spip_reponses >
Attention, ces fichiers sont dans le répertoire config, qui n’est pas public : c’est une protection de l’accés aux fichiers.
On peut toutefois ajouter un include_spip('inc/formidable_fichiers');
dans mes_fonctions.php
, ce qui permet d’utiliser la fonction comme filtre : le premier argument est alors ce sur quoi s’applique le filtre.
Le code pour générer les liens des fichiers est alors :
<BOUCLE_formidable_id_form(FORMULAIRES) {identifiant=<identifiant_du_formulaire>}>
<BOUCLE_spip_formulaires_rep(FORMULAIRES_REPONSES) {id_formulaire}{id_auteur=<id_de_l_auteur>}>
<BOUCLE_spip_reponses(FORMULAIRES_REPONSES_CHAMPS) {id_formulaires_reponse=#ID_FORMULAIRES_REPONSE}{nom IN fichiers_1, fichiers_2,<nom_de_la_saisie>}>
<BOUCLE_liste_fichiers(POUR) {tableau #VALEUR}>
<p>Chemin du fichier:
#EVAL{_DIR_FICHIERS_FORMIDABLE}formulaire_#ID_FORMULAIRE/reponse_#ID_FORMULAIRES_REPONSE/#NOM/[(#VALEUR|table_valeur{nom})]<br>
<a
href="[(#VAL{#ID_FORMULAIRE}|formidable_generer_url_action_recuperer_fichier{#ID_FORMULAIRES_REPONSE,#NOM,[(#VALEUR|table_valeur{nom})]})]">
Lien du fichier</a></p>
</BOUCLE_liste_fichiers>
</BOUCLE_spip_reponses >
</BOUCLE_spip_formulaires_rep>
</BOUCLE_formidable_id_form>
Autorisations de formidable
#AUTORISER{repondre, formulaire, #ID_FORMULAIRE}
Permet par exemple de ne pas afficher le formulaire si l’utilisateur a déjà répondu. A combiner aussi avec les modèles fournis:
- modeles/formulaires_reponse.html (affiche une réponse précise)
- modeles/formulaire_analyse.html (stats de toutes les réponses)
Formitable
FormiTable (developpement arrêté) : plugin avec potentiel mais non maintenu
FormiTable est un plugin de Formidable et lui fournit un traitement pour enregistrer les saisies de ’formidable’ dans une table utilisateur, avec une correspondance de chaque champ d’un formulaire vers un champ de la table.
Il permettait d’aller la facilité de formidable pour concevoir des formulaires, et la facilité de SPIP à traiter les tables et accéder à leurs champs.
- État dégradé : Ça marchait bien mais ça n’a pas été maintenu et ça n’a pas suivi le développement de Formidable. Il se peut que Formitable (et Formidable) étaient peu utiles pour les développeurs qui peuvent coder un CVT sur mesure, et pas ressenti comme assez nécessaire pour les autres, que les traitements de Formidable, même plus limités que ceux de SPIP, satisfaisaient déjà.
Voir la documentation du plugin formitable
Discussions by date of activity
7 discussions
Bonjour,
Je souhaiterais qu’un auteur identifié par login, ayant répondu à un formulaire, ait le droit ensuite de modifier sa réponse, mais sans avoir le droit de voir les autres réponses du formulaire données par d’autres utilisateurs.
Si je choisis d’attribuer une gestion d’auteurs du formulaire, chaque auteur a accès à toutes les réponses, et si je laisse tel quel, l’auteur identifié n’a pas accès à la modification de sa réponse, même en ayant choisi dans les réglages du plugin que “les internautes peuvent modifier leurs réponses après coup”.
Comment puis-je faire ? Dois-je surcharger la fonction d’autorisation de modifier la réponse d’un formulaire ?
Merci !
Bonjour,
Voici comment j’appelle un formulaire rempli avec les champs éditables pour l’auteur identifié :
ceci sur une page appelée via :
[(#INCLUREfond=inclure/mapage,id_auteur)]
Je ne sais plus s’il faut compléter par une autorisation spéciale dans la config du site ou un plugin (crayons ?).
dd
Reply to this message
Bonjour,
Question certainement très naïve : comment ajouter un “placeholder” sur un formulaire formidable ?
Merci
Normalement, chaque saisie individuel possède une option placeholder.
Reply to this message
Bonjour,
Je cherche à envoyer les données d’un formulaire aux inscrits d’une liste de diffusion. J’ai cru voir passer dans les recherches un post de forum traitant de cette question, mais erreur 404. Avez-vous des pistes ou me faut-il développer une petite fonction? Merci d’avance.
il suffit de ocnfigurer le traitement “envoyer par email”, pour qu’il envoie à l’adresse de la liste de diffusion...
Bonjour Maïeul et merci pour la rapidité.
A dire vrai, je pensais plutôt à une liste de diffusion Spip Newsletter
Bonjour,
alors là non je ne crois pas que ce soit possible (il faudrait du reste dans ce cas qu’il s’agisse d’une liste fermée).
Après cela ne devrait pas être trop compliqué de créer un plugin qui ajoute un traiement en ce sens.
Merci, cela confirme ce que je pensais et va m’éviter de me disperser.
Si on donne suite, je ne manquerais pas de proposer le plugin.
Reply to this message
Bonjour,
je voudrais afficher les résultats d’un formulaire mais en isolant selon le choix d’un bouton radio saisie ? N’avoir que les résultats si le bouton radio etait lorem.
@radio_1==“lorem”
@radio_1==“ipsum”
Je ne sais pas comment m’y prendre et où filtrer avec ce critère restrictif. Merci beaucoup
J’ai essayé ca mais ca marche pas
Je suis étonné que votre essaie ne marche pas. Il faudrait voir avec le mode debug pour comprendre. Mais on est bien d’accord que
{lorem}
c’est la valeur “technique” et pas la valeur “humaine” ?Lorsque vous déclarerz vos clé, vous faite bien
?
Reply to this message
Bonjour,
Je voudrais que les utilisateurs ayant rempli un formulaire puissent modifier leurs réponses par la suite mais je n’y arrive pas.
J’ai passé le statut des utilisateurs de “visiteur” à “rédacteur”
Avec le plugin “Autorité” j’ai indiqué que les auteurs n’avaient pas accès à l’espace privé
J’ai indiqué que les réponses au formulaire était modifiables
J’ai indiqué que les pages publiques des formulaires étaient autorisées
J’ai ajouté manuellement les auteurs au formulaire (mais ceci n’est pas pérenne étant donné que les auteurs s’inscrivent librement sur le site)
J’ai testé les 2 modes pour
Rien n’y fait. les champs ne sont éditable dans les pages publiques que par l’admin du site.
Ma boucle :
Si quelqu’un a une idée car là je ne vois pas ce que je pourrais faire de plus.
Merci !
La modification par les auteurs du formulaire est censée se faire avec #FORMULAIRE_FORMIDABLEid_identifiant_du_formulaire, pas avec les crayons. C’est à ce niveau que les tests sont faits. J’imagine qu’il faudrait mutualiser le code de formidable entre la partie “modification d’une réponse via un formulaire” et “utilisation des crayons” et utiliser un système d’autorisation. Pas le temps en ce moment.
Ah d’accord, je n’avais pas compris que seuls les administrateurs pouvaient modifier les réponses dans l’espace public.
Merci
non, non, c’est possible de modifier depuis l’esapce public. mais pas via crayons, via le formulaire complet. Et peut être via crayons si quelqu’un se penche dans le code pour voir ce qu’il faut modifier pour que ce soit plus large.
Reply to this message
D’accord merci.
Je cherche dans spip.net où est la doc sur les “boucle POUR”
mais je ne trouve pas.
Dans le glossaire il y a “Balises techniques” mais pas de lien actif.
La boucle POUR n’a jamais été officielle, j’avais oublié. Elle est censé être remplacé par DATA, qui est documenté ici.
https://www.spip.net/fr_article6434.html
Personnelement je trouve la syntaxe de POUR plus simple, elle est documenté avec Bonux (mais livré en standard dans les versions récentes de SPIP)
Reply to this message
Bonjour,
J’arrive à afficher les réponses d’un formulaire éditable avec les crayons sur le site public
mais je n’arrive pas à comprendre comment ajouter devant chaque valeur le nom du champ (label) car
oblige à indiquer chaque champ si je comprend bien.
Y-a-t-il une astuce pour chercher et afficher tous les labels d’un formulaire ?
Merci
tu peux boucler sur
[(#SAISIE|unserialize)]
grâce à une bouclePOUR
Reply to this message
Add a comment
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Follow the comments:
|
