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
Aucune discussion
Ajouter un commentaire
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.
Suivre les commentaires : |