Annuaire avec Forms & Tables

Exemple concret de création d’un annuaire style « page jaune », qui peut servir aussi de pas à pas pour le plugin Forms & Tables

Cette mini doc est tirée de ma propre expérience de débutant avec SPIP, et n’est peut-être pas la meilleure façon de faire, mais au moins cela fonctionne.

Nota SPIP-Contrib : une contribution qui affiche clairement sa nature de témoignage de mise en oeuvre pouvant être améliorée de Forms & Tables, mais justement intéressante pour cela

Un annuaire en trois pages

L’annuaire est composé de trois pages
-  La première est la liste des catégories (métier, ou autre), la page entreprise.html
-  La seconde liste les fiches qui appartiennent à la catégorie choisie, la page fichecat.html
-  La dernière est la fiche détaillée du sujet, la page ficheent.html

Aperçu de l’annuaire
Montage de prises d’écran

Utilisation de Forms & Tables

Tout d’abord, il vous faut créer deux tables, dans la partie privée. Appelons-les « Entreprises » et « Catégorie » :
-  « Entreprise » correspond à votre table principale. Elle contient des champs comme « Nom », « Adresse », « Téléphone », etc.
-  « Catégorie » n’a qu’un seul champ, le champ « NomCat »

L’idée est d’utiliser le champ de table liée pour simuler une contrainte hiérarchique et générer ainsi un arbre hiérarchique. En réalité, tout est factice, mais le résultat correspond à ce que l’on cherche.

La page entreprise.html

J’ai choisi d’afficher les catégories par 2, mais vous pouvez simplifier le code en supprimant tout ce qui est html+la boucle _suite.

Cette page est simple, on liste toutes les catégories de notre table « catégorie » et on y colle un lien qui prend en paramètre le nom de la catégorie. (Et non l’id). Petit point interessant, pour trier les données, on utilise "tri_donnee NomChampSpecifiant". Ainsi il faut que le champ soit déclaré "spécifiant" et que l’on releve son nom de champ spécifiant en regardant dans la base de donnée, ou dans les URL servant à trier les données depuis la page d’administration. Ils sont de la forme "ligne_X"

Son code de squelette est le suivant

<div>
	<BOUCLE_champs(FORMS_CHAMPS){titre=NomCat}{tri_donnee ligne_1}>
	<table width="100%" border="0">
	<B_reponses>
	<tr>
		<BOUCLE_reponses(FORMS_DONNEES){id_form=1}{doublons}{0,2}>
			<td width="50%">
				<a href="spip.php?page=fichecat&nom_cat=#VALEUR"><b>#VALEUR</b></a>
			</td>
		</BOUCLE_reponses>
	</tr>

	<BOUCLE_reponses_suite (BOUCLE_reponses)></BOUCLE_reponses_suite>

</B_reponses>
</table>
</BOUCLE_champs>
</div>

La page fichecat.html

Cette page n’est absolument pas optimisée, mais elle est tout de même la page qui posait problème à beaucoup de personnes. La liaison de table étant factice, comment réalisé les boucles ? Je ne sais pas comment Cédric fait, mais voici ma façon de faire.

D’abord, je vais chercher dans la table « FORMS_DONNES_CHAMPS » l’id qui correspond au nom de ma catégorie.

Ensuite je crée un tableau ’tab’ et j’y imbrique trois boucles (voir le code plus bas) :
-  la première sélectionne l’id_form de votre table « Entreprise »
-  la seconde sélectionne uniquement les id_donnee qui ont une correspondance à votre id de catégorie dans la table « FORMS_DONNEES_DONNEES. »
-  enfin la dernière choisit de n’afficher que le nom de l’entreprise et la range dans le tableau.

Si j’ai utilisé un tableau c’est parce que cet enchainement de boucles a un soucis que je n’ai su résoudre, des doublons. Alors grâce au tableau
je passe une petite fonction array_unique pour les balayer.

Enfin, je mets en lien ma ficheent.html avec en paramètre mon id_donnee (et accessoirement le nom de la catégorie si je veux l’afficher dans la fiche de mon entreprise)

<table width="100%">
	
<BOUCLE_cat(FORMS_DONNEES_CHAMPS){valeur=#ENV{nom_cat}}>
        #SET{id_cat,#ID_DONNEE}
</BOUCLE_cat>

    #SET{tab,#ARRAY{0,0}}
    
    <BOUCLE_reponses(FORMS_DONNEES){id_form=2}>
        <BOUCLE_lie(SPIP_FORMS_DONNEES_DONNEES){id_donnee_liee=#GET{id_cat}}>
            <BOUCLE_champs(FORMS_CHAMPS){titre=Nom}{tri_donnee ligne_1}>
            [<tr><td><div class="bordureCat2"><a href="spip.php?page=ficheent&nom_cat=#ENV{nom_cat}&id_donnee=#ID_DONNEE"><img src="images/puceCat.gif" border="0" />&nbsp;&nbsp;<b>(#VALEUR|in_array{[(#GET**{tab})]}|?{'',#VALEUR})]
            [(#GET{tab}|array_push{#VALEUR}|?{''})</b></a></div></td></tr>]                      
			</BOUCLE_champs>
        </BOUCLE_lie>	

    </BOUCLE_reponses>
</table>

La page ficheent.html

J’ai laissé exprès la mise en page pour montrer l’utilisation des différents type de champs, notamment les images.

Mon astuce pour afficher une image est d’utiliser un champ ligne de texte, d’utiliser l’uploader de SPIP (pour cela pensez a cocher « permettre l’ajout de fichiers » a la création de la table), puis en glisser/deposer, l’URL de mon image se retrouve dans ma ligne de texte.

Je traite a la suite mon champ dans une balise par un #SET puis un #GET qui prend en sus un filtre de création de vignette. (L’encapsulation de f&t doit pouvoir être utilisée mais je ne sais pas comment)

Bon sinon cette page est aussi simple que la première, on affiche nos différents champs (soit avec #LESVALEURS si on ne désire pas de mise en page, soit un par un grâce au critère {titre})

<BOUCLE_reponses(FORMS_DONNEES){id_form=2}{id_donnee}>
	<div class="bordureAnnuaire">
	<table border="0" width="100%">
	<tr>
		<BOUCLE_nom(FORMS_CHAMPS){titre=Nom}>
			<td width="30%"><b>Nom : </b></td><td width="60%">#VALEUR</td>
		</BOUCLE_nom>
	</tr>
	<tr>
		<BOUCLE_adresse(FORMS_CHAMPS){titre=Adresse}>
			<td><b>Adresse : </b></td><td>#VALEUR</td>
		</BOUCLE_adresse>
	</tr>
	<tr>
		<BOUCLE_cp(FORMS_CHAMPS){champ=ligne_5}>
			<td><b>Code Postal : </b></td><td>#VALEUR</td>
		</BOUCLE_cp>
	</tr>
	<tr>
		<BOUCLE_ville(FORMS_CHAMPS){titre=Ville}>
			<td><b>Ville : </b></td><td>#VALEUR</td>
		</BOUCLE_ville>
	</tr>
	</table>
	</div>
	<br />
	<div class="bordureAnnuaire">
	<table border="0" width="100%">
	<tr>
		<BOUCLE_courriel(FORMS_CHAMPS){titre=Courriel}>
			<td width="30%"><b>Courriel :</b></td><td width="60%"><a href="mailto:#VALEUR">#VALEUR</a></td>
		</BOUCLE_courriel>
	</tr>
	<tr>
		<BOUCLE_telfixe(FORMS_CHAMPS){titre=Telephone fixe}>
			<td><b>Tel fixe :</b></td><td>#VALEUR</td>
		</BOUCLE_telfixe>
	</tr>
	<tr>
		<BOUCLE_telport(FORMS_CHAMPS){titre=telephone portable}>
			<td><b>Tel portable :</b></td><td>#VALEUR</td>
		</BOUCLE_telport>
	</tr>
	<tr>
		<BOUCLE_fax(FORMS_CHAMPS){titre=Fax}>
			<td><b>Fax :</b></td><td>#VALEUR</td>
		</BOUCLE_fax>
	</tr>
	</table>
	</div>
	<br />
	<div class="bordureAnnuaire">
	<table border="0" width="100%">
	<tr>
		
			<td width="30%"><b>Cat&eacute;gorie :</b></td><td width="60%">#ENV{nom_cat}</td>
		
	</tr>
        <tr>
		<BOUCLE_web(FORMS_CHAMPS){titre=SiteWeb}>
			<td><b>Site internet :</b></td><td><a href="#VALEUR" target="_blank">#VALEUR</a></td>
		</BOUCLE_web>
	</tr>
	<tr>
		<BOUCLE_pres(FORMS_CHAMPS){titre=Présentation}>
			<td><b>Pr&eacute;sentation :</b></td><td>#VALEUR</td>
		</BOUCLE_pres>
	</tr>
	</table>
	</div>
	<br />
	<div class="bordureAnnuaire">
	<table border="0" width="100%">
	<tr>
<BOUCLE_imgint(FORMS_CHAMPS){titre=Photo Interieur}>
#SET{imgint,<td><center><a href="#VALEUR"><img src="#VALEUR" border="0" /></a></center></td>}

[(#GET{imgint}|image_reduire{200})]
</BOUCLE_imgint>
		

		
	
<BOUCLE_imgext(FORMS_CHAMPS){titre=Photo Exterieur}>
#SET{imgext,<td><center><a href="#VALEUR"><img src="#VALEUR" border="0" /></a></center></td>}
[(#GET{imgext}|image_reduire{200})]
</BOUCLE_imgext>
		</tr>
	</table>
	</div>
	</BOUCLE_reponses>

Conclusion

Si vous voulez voir le résultat final :
http://www.coutras-calic.fr/spip.php?page=entreprise. ou regardez le document joint.

Merci à tout les gens qui m’ont aidé sur la liste spip-zone, sur SPIP-Contrib et surtout le canal irc #spip@freenodes !

Si vous avez des questions ou des réponses aux choses que je n’ai su faire proprement n’hésitez pas ...

Autres exemples d’annuaire avec Forms & Tables

Ajout SPIP-Contrib

Voir cet intéressant article sur Spip Ô Toulouse : Premières solutions pour l’annuaire de personnes avec un exemple très parlant et qui décrit l’importation de données via le le plugin « import csv ».

Discussion

35 discussions

  • tarentaise

    Bonjour,

    j’ai créé plusieurs tables qui utilise toutes des champs mots clés. Je cherche à récupérer dans une boucle le numéro du mot clé associé à une réponse pour le passer dans un lien. J’arrive à afficher la valeur ou le titre du mot clé sélectionné mais pas son numéro
    D’avance merci

    Répondre à ce message

  • marabbeh

    Selon moi ceci est un contre-exemple. J’ai créé aussi un annuaire en utilisant des tables non Spip. Je l’ai fait fonctionner à l’aide de boucles beaucoup plus simples que dans cet exemple, mais sur mon serveur local où Forms & Tables n’est pas installé. J’ai voulu faire fonctionner cet annuaire sur mon site en ligne, où Forms & Tables est installé, et les tables ne sont plus reconnues. Donc je suis venu voir pourquoi. Et cet exemple ne m’encourage pas à utiliser le technique présentée, bien que je tienne à conserver Forms & Tables pour cause de formulaires.

    Répondre à ce message

  • 1
    Guillaume M

    Bonjour,

    j’ai du mal à comprendre la liaison entre les deux tables :

    pour la page fichecat.html, cette étape m’échappe :

    - la seconde sélectionne uniquement les id_donnee qui ont une correspondance à votre id de catégorie dans la table « FORMS_DONNEES_DONNEES. »

    car je n’ai rien comme données dans la table "forms_donnees_donnees" sous PHPMyadmin après avoir créer les deux tables "catégorie" et "entreprise" sous l’interface privée SPIP avec le plugin.

    par conséquent la partie de code suivant de cette page ne donne rien :

    BOUCLE_lie(SPIP_FORMS_DONNEES_DONNEES)id_donnee_liee=#GETid_cat

    Quelque chose m’échappe, merci de m’éclairer.

    • Guillaume M

      Je me réponds en partie sur mon problème après avoir relu tous les commentaires depuis le début, je suis tombé sur un du 12 juillet 2007 de Pietrus :

      merci pour ta rapidité,
      il n’y a pas un probleme d’affichage avec ta réponse ?
      Dans la documentation tu dis qu’il est nécessaire d’utiliser un champ de table lié. mais où cela ? dans la table « entreprises » ? je créé un champ categorie dont la nature est « jointure » je suppose.
      puisqu’il n’y a pas qu’un champ dans la table catégorie.

      Après plusieurs essais, je crois comprendre qu’il faut créer dans les DEUX tables « entreprise » ET « catégorie », un champs qui aura pour type « jointure avec une autre table » (leur nom n’a pas besoin d’être identique mais c’est plus simple pour s’y retrouver je pense).

      Une fois créés, lorsque l’on rentre les infos à partir du formulaire « entreprise » dans l’interface privée, on peut sélectionner une catégorie pour une entreprise donnée . Ainsi la jointure est faite, cela créé automatiquement un lien dans la table « forms_donnees_donnees » visible sous PHPMyadmin.

      Maintenant, je bloque sur la page listing.html qui ne veut pas s’afficher à partir des liens de la page catégorie ! Affaire à suivre...

    Répondre à ce message

  • 1

    Bonjour,

    JE débute avec spip, je dois réaliser un annuaire de personne. je me suis donc servis du tuto ci-dessus en essayant de l’adapter à mon projet mais je n’arrive pas a afficher les images. seul le nom « nom.jpg » de l’image apparait. Là je comprend pas comme je pourrais faire.

    Voici ce que j’ai fait :
    Au lieu d’avoir 3 pages, j’ai une page « liste_cartégorie » et une page« details » : qui affiche les personnes composant la categorie (photo + non + tel +adresse..)
    "
    J’ai donc 2 tables : la premier « categorie » avec un champ : nom_cat et la second : service, qui dispose de plusieurs champ text avec commme champ spécifiant le champ : nom.
    le codes de la page « détail » est joind en fichier image

    A l’affichage j’ai :

    catégorie 1
    photo.jpg <= le problème est donc ici
    M. Dupond
    Technicien
    Tel.
    etc

    Ps je précise que j’ai bien autoriser l’ajout de fichier à la création de la table
    Merci pour votre aide

    • Bonjour, c’est exactement que j’aimerais faire !! Mais les fichiers ne sont plus disponibles ? je ne les vois pas sur la page.. sniiiff !
      Merci

    Répondre à ce message

  • compatibilité avec forms 2.0 ?
    savez vous comment faire ?

    Répondre à ce message

  • J’ai réussi à faire un annuaire des associations mais j’ai eu un problème que j’ai fininalement réussi à résoudre.
    Je ne sais si c’est lié à Spip 2 mais je me suis retrouvé avec, dans la liste des associations d’une catégorie, trois fois chaque association ... Pour le clic sur l’un des trois liens identiques j’avais dans la fiche de l’asso, deux fois chaque donnée.

    Il s’avère que par une mauvaise manip en supprimant un formulaire des données sont restées existantes dans FORM_CHAMPS. Une fois enlevée à la main mes fiches sont bien présentées

    Une petite erreur dans le squelette, par contre, était dûe aux doublons dans la listes des associations d’une certaine catégorie.

    Voici donc ma version :

    <BOUCLE_categorie(SPIP_FORMS_DONNEES_CHAMPS)valeur=#ENVnom_cat>
    #SETid_cat,#ID_DONNEE
    </BOUCLE_categorie>

    #SETtab,#ARRAY0,0

    <BOUCLE_reponses(FORMS)id_form=2>
    <BOUCLE_lie(SPIP_FORMS_DONNEES_DONNEES)id_donnee_liee=#GETid_cat>
    <BOUCLE_champs(FORMS_CHAMPS)titre=Nomtri_donnee ligne_1>
    [<div class="bordureCat2"><a href="spip.php ?page=annuaire_fiche&nom_cat=#ENVnom_cat&id_donnee=#ID_DONNEE"><b>(#VALEUR|in_array[(#GET**tab)]| ?’’,#VALEUR)]
    </b></a></div>
    </BOUCLE_champs>
    </BOUCLE_lie>

    </BOUCLE_reponses>

    Bon en gros j’ai juste mis

    <BOUCLE_reponses(FORMS)id_form=2>

    Au lieu de

    <BOUCLE_reponses(FORMS_DONNEES)id_form=2>

    Et désormais ça marche NICKEL :)

    Répondre à ce message

  • 1

    Excuse mon manque de vocabulaire technique mais qu’entends-tu par « en SVN sur le serveur »

    • BOnjour

      En fait tu ne le trouveras pas sous format ziper comme pour plein d’autre. Contact moi en priver je te ferais un zip mais sache que comme il existe pas en ziper cela veut dire qu’il n’est pas opérationnel totalement (je m’en sers quand même)

    Répondre à ce message

  • 1

    Bonjour,
    Existe-t’il une version de Forms & Tables pour SPIP 2 ?

    Répondre à ce message

  • Bonjour,

    J’ai suivi étape par étape le tutorial ci-dessus et tout fonctionne nickel. Seulement j’aimerai faire une petite variante mais je m’en sort pas du tout. Dans l’éxemple nous avons le cheminement suivant : Les entreprises (par catégorie) -> Les noms d’entreprises (liste) -> Les informations de l’entreprise.

    Moi j’aimerai pourvoir avant toutes ces étapes séléctionner le Pays. Cheminement :
    Les Pays -> Les entreprises (par catégorie) -> Les noms d’entreprises (liste) -> Les informations de l’entreprise.

    J’ai bien essayé d’ajouter un troisième table de référence mais cela mélange les informations. Je n’arrive vraiment à rien. Quelqu’un peut-il m’aider ?

    Merci pour votre attention,

    Julien

    Répondre à ce message

  • l’ancien code proposé sur ce forum pour integrer la recherche sur les tables de « forms et table » au moteur de recherche de spip ne fonctionne plus,

    quelqu’un a t’il une proposition ?

    un code à ajouter dans recherche.html pour permettre la recherche sur des tables

    Répondre à ce message

  • 2
    Jean-Baptiste

    Bonjour et merci pour votre contribution,

    J’aurais une question : comment avez-vous trouvé que la boucle FORMS_DONNEES avait comme balise #VALEUR ?

    En effet, lorsque l’on étudie la structure des tables SQL générées par le plugin, on constate que la table SPIP_FORMS_DONNEES n’a pas de champ VALEUR. Par contre, VALEUR est un champ de la table SPIP_FORMS_DONNEES_CHAMPS ...

    Merci

    • le « plus simple »(!) pour entrer dans les subtilités des balises de F&T consiste à jeter un œil au code des fichiers modèles fournis dans le répertoire /plugins/forms_et_tables_1_9_1/modeles

    • Un coup d’oeil à la page suivante apportera des éléments de réponse à ta question

      Carnet de notes

    Répondre à ce message

  • Bonjour,

    merci pour ce plugin. Je galère néanmoins encore pas mal et n’arrive pas à faire ce que je voudrais, à savoir monter un annuaire comme celui ci :

    http://afup.org/pages/annuaire/

    Quelqu’un aurait-il une idée sur la façon de procéder pour arriver à une résultat similaire ?

    Je pense que ça n’est pas trop compliqué, je pensais créer une seule table avec les champs nom, prénom, tel etc...

    mais je n’arrive pas à trouver comment la faire afficher dans la partie publique dans un article ou un squelette...

    Quelqu’un peut m’aider ?

    Merci par avance

    Répondre à ce message

  • 1
    Nothing

    Visiblement l’utilisation de ces feuilles de squelette fonctionnent mal avec spip 1.9.3.

    J’ai utilisé « Forms & Tables » pour la version 1.9.3, cependant j’ai cette erreur :

    Fatal error : Only variables can be passed by reference in /var/www/ecrire/public/composer.php(65) : eval()’d code on line 62

    Visiblement SPIP n’aime pas qu’on envoie certains paramètres en url ... où je me trompe ?
    Exemple :
    http://192.168.0.5/spip.php?page=fichecat&nom_cat=Cat1

    Avez vous des idées sur la résolution de ce problème ?

    Quelqu’un à déjà eu un tel problème avec spip 1.9.3 ? C’est « que » moi ? :)

    Répondre à ce message

  • Tatimanou

    Bonjour,
    je suis novice en la matière.
    Je « gère » le site internet de mon club de badminton.
    Nous avons généré un formulaire d’inscription au club.
    Est ce qu’il est possible de récupérer des informations des réponses envoyées pour renseigner une table qui permettra d’élaborer l’annuaire ?

    Je n’ai pas tout compris à ce tuto. Est ce que je dois créer ces 3 pages ?
    Si oui, dans quelle arborescence ?
    merci d’avance
    Emmanuelle

    Répondre à ce message

  • Merci pour cette contrib !

    Je souhaite afficher les données récoltées dans ma table et pouvoir trier selon les champs spécifiants déclarés (avec des petites flèches pour choisir le sens du tri).

    Savez-vous comment je dois faire ? J’ai cherché mais ne trouve rien.

    Merci

    Répondre à ce message

  • 11

    Bonjour ,
    merci pour cette doc,

    je me pose une question,

    si l’on voulais sur le meme principe des 3 pages permettre sur la premiere page de faire un choix sur plusieurs criteres : catégorie et ville par exemple.

    Serait il possible d’utiliser la meme technique ?

    • Hmm oui, il faudrait alors faire une seconde boucle, sur une table « ville », et envoyer les deux variables. Ca complique la chose, mais tu peux.

    • En fait j’imaginais de remplacer la page « entreprise.html » par une page « rechercheentreprise.html »

      et dans cette page je glisse un formulaire de recherche multicritère...

      qui me permet de rechercher l’entreprise pas uniquement en fonction de la catégorie,
      mais en fonction de la ville également par exemple.

      ensuite j’utiliserais tes deux autres pages pour l’affichage des résultats.

      je suis en train de regarder ca,

      merci pour ta réponse

    • Hmm je suppose que c’est possible, mais de fait alors tu n’a plus besoin de table lié je pense. Il te suffierai d’afficher la liste des entreprises ayant pour champ tes deux criteres. La liaison sert principalement à la gestion automatisée des pages « entreprise » et « catent ». Si elles sont issues d’une recherche, alors elles perdent leur utilité.

      Par contre, bon sa savoir, il existe une façon de demander au moteur de recherche de spip de rechercher dans tes tables. Je te donne le code :

      #SET{recherche,#ENV{recherche,#EVAL{_request("recherche")}}}
      #SET{testtri,#ENV{tri,#EVAL{_request("tri")}}}
      #SET{tri,#GET{testtri}|?{#GET{testtri},rang}}
      #SET{senstri,#ENV{senstri,#EVAL{_request("senstri")}}}
      [(#GET{recherche}||?{'',#SET{recherche, bdziuqhduzgf}})]
      <B_donnees>
      <table class="spip donnees" id='donnees-2'>
      <tbody>
      <BOUCLE_donnees(FORMS_DONNEES){id_form=2}{id_mot?}{tri_donnee #GET{tri}}{inverse #GET{senstri}}{filtre}{recherche_donnee #GET{recherche}}{pagination 20}>
      	<tr class='[(#_donnees:COMPTEUR_BOUCLE|alterner{row_even,row_odd})]'>
      	
      		<BOUCLE_body(FORMS_CHAMPS){id_form}{type !IN (separateur,textestatique)}{par rang}{listable=oui}{titre=Nom}>
      		
      		<td ><a href="spip.php?page=ficheent&id_donnee=#ID_DONNEE">#VALEUR</a></td>
      		
      		</BOUCLE_body>
      	</tr>
      </BOUCLE_donnees>
      </tbody>
      </table>
      </B_donnees>
      <h3 class="texte">Aucune donn&eacute;e trouv&eacute;e</h3>
      <//B_donnee>

      A mettre donc dans ton squelette de recherche.

    • Peux tu me donner davantage de précisions sur le fonctionnement de ce bout de script. Il permet de rechercher sur n’importe quelle table que l’on a créé puisqu’il ne fait pas référence à un formulaire en particulier.

      Et il permet de rediriger les résultats vers la page entreprise c’est bien cela ?

      Où cela s’ajoute t’il exactement ?
      n’importe où dans recherche.html ?

      merci

      Pietrus

    • Il cherche dans une seule table (ici id_form=2).
      En effet cela ce place « ou tu veux » dans le squelette recherche. Si tu veux une xemple, va voir sur le site que je donne en exemple à la fin de la doc, en haut à droite, tu as un petit formulaire de recherche. Tape par exemple « axa » et regarde le résultat.

    • J’ai testé c’est génial sur ton site

    • à propos du moteur de recherche.

      Ca fonctionne très bien , la table est indexée. pas de probleme

      par contre je rencontre un probleme avec le formulaire forms_recherche

       <input type="text" class="forml" name="recherche" id="recherche" value="[(#ENV{recherche,#EVAL{_request("recherche")}}|sinon{''})]" />

      Lorsque je laisse activée cette ligne, et que je valide le formulaire de recherche (dans le cadre d’une utilisation du modele fourni table_recherche) je suis renvoyé sur une page fantaisiste et ca ne fonctionne pas.

      Utilises tu ces modeles et formulaires ?

    • Hmm là je ne saurais t’aider, désolé. Jamais utilisé. Essaye de poser la question dans le carnet de note F&T, peut etre que l’auteur pourra te répondre.

    • pietrus

      ce code fonctionne très bien mais par exemple il ne cherche pas sur tous les champs de la table indiquée par le critère form.

      en effet les champs select par exemple ne sont pas pris en compte.

      savez vous comment modifier ce code pour que les résultats soient affichés y compris si la réponse est dans un champ de type select.

      exemple pour une entreprise , la catégorie peut être dans un champ select.

      et à ce moment le moteur de recherche n’affiche pas les données qui correspondent à une recherche basée sur la valeur du champ select.

      merci

    • J’utilise le code ci-dessus pour effectuer une recherche dans une table. Ça fonctionne... mais avec un petit problème : si le mot recherché se trouve dans plusieurs champs de la donnée, cette donnée sort plusieurs fois. Ex : la donnée A contient le mot toto dans les champs Nom et Biographie, alors la recherche donnera 2 fois la donnée A. J’ai essayé avec doublons, ce n’est pas mieux... Une idée ?

    • Bon ben j’ai trouve tout seul une solution :

      <B_donnees>
      <ul>
         #SET{donnee,''}
         <BOUCLE_donnees(FORMS_DONNEES){id_form=1}{recherche_donnee #RECHERCHE}>
            <li>
               <BOUCLE_body1(FORMS_CHAMPS){id_form}{titre=A propos / About}>
                  [(#ID_DONNEE|!={#GET{donnee}}|?{' '})
                     - #VALEUR
                  ]
               </BOUCLE_body1>
               #SET{donnee,#ID_DONNEE}
            </li>
         </BOUCLE_donnees>
      </ul>
      </B_donnees>

    Répondre à ce message

  • 1

    bonjour,

    pour ma part j’ai utilisé une variant de ce code,

    j’ai :

    une seule table avec un champ select (la catégorie de l’entreprise)

    -  page A : affiche la liste des entreprises par catégorie
    -  page B : affiche l’entreprise

    je fais afficher la liste des entreprises par catégorie, et par ordre alphabétique.
    un double classement d’abord par catégorie , puis par ordre alphabétique à l’intérieur de chaque catégorie.

    cependant je n’arrive pas à ne faire apparaitre qu’une seule fois le nom de la catégorie suivi de toutes les entreprises concernées,

    j’ai à chaque fois categorie + nom

    je souhaiterais : categorie : nomA, nomB, nomC ...

    si quelqu’un peut m’aider, voici mes boucles :

    tri_donnee select_1 = le champ categorie
    ligne_1 = nom de l’entreprise


    Page A :

    <BOUCLE_champs(FORMS_CHAMPS)>
    
    	<B_reponses>
    	
    	
    	
    <BOUCLE_reponses(FORMS_DONNEES){id_form=6}{tri_donnee select_1}{tri_donnee ligne_1}{doublons}{0,2}>
    
    <BOUCLE_categorie(FORMS_CHAMPS){titre=categorie_entreprise}>	
    
    				#VALEUR
    
    				<BOUCLE_champentreprise(FORMS_CHAMPS){titre=entreprise}>
    			
    				<a href="spip.php?rubrique5&id_donnee=#ID_DONNEE">— #VALEUR <br> </a>
    				</BOUCLE_champentreprise>
    				
    			</BOUCLE_categorie>	
    		</BOUCLE_reponses>
    	
    
    	<BOUCLE_reponses_suite (BOUCLE_reponses)></BOUCLE_reponses_suite>
    
    </B_reponses>
    
    </BOUCLE_champs>
    • personne n’aurait une idée afin d’afficher les résultats de la table de cette manière ? la table possede deux champ : un champ ligne de texte et un champ select. Il s’agit de présenter les résulat en fonction de la boucle select mais en affichant qu’une fois ce champ select pour toutes les données qui le possede.
      exemple :

      • NOM du premier critere select
        • premiere donnée avec ce critere
        • deuxieme donnée avec ce critere
      • NOM du deuxieme critere select
        • premiere donnee du deuxieme critere
        • deuxieme donnee du deuxieme crietere
      • etc.

    Répondre à ce message

  • Afin que mon visiteur remplisse un formulaire sans se lasser et afin de pouvoir savoir précisement ou il décroche éventuellement dans mes stats, je voudrais savoir s’il est possible de découper un formulaire en plusieurs pages avec par exemple un bouton suivant (au lieu du valider)

    Cela serait très pratique si c’etait possible avec ce plugins.

    Si vous avez des pistes merci.

    Répondre à ce message

  • pietrus

    lorsque j’utilise le modele table_recherche

    je peux faire afficher les résultats par ordre alphabétique en modifiant la boucle dans le modele et en choisissant par ligne1 par exemple pour afficher les réponse en fonction de ce champ.

    par contre si il s’agit d’un select, par select 1 ne fonctionne pas.

    avez vous une idée de comment contourner ce probleme ?
    merci

    Répondre à ce message

  • Bonjour,

    pour trier les données, on utilise « tri_donnee NomChampSpecifiant ». Ainsi il faut que le champ soit déclaré « spécifiant » et que l’on releve son nom de champ spécifiant en regardant dans la base de donnée, ou dans les URL servant à trier les données depuis la page d’administration. Ils sont de la forme « ligne_X »

    Bravo pour cette magnifique réalisation !

    ... Dommage que je n’y comprenne rien... j’ai suivi à la lettre pourtant la démonstration : Ma « page=entreprise » reste désespérément vide.

    SVP, qu’est-ce que déclarer un champ spécifiant ?
    Est-ce cocher « Ce champ qualifie la donnée (tri, filtre, description) »

    SVP, où (Plus précisément) trouve-ton « son nom de champ » « ligne_X » : J’ai cherché dans la base de données et dans l’espace privé/Edition/Table/Champ (Administration ?), form=1 form=2, etc ... oui, il y a des url avec ça ;-) mais aucun « ligne_1 », « ligne_2 » ...
    J’ai essayé la valeur de « form » pour « ligne », c’est pas la solution :-(

    J’ai la version du 24 janvier de Forms et Tables et suis sous Spip 1.9.2c

    Merci de bien vouloir éclairer un nul

    Répondre à ce message

  • 2

    Bonjour,
    J’essaye d’installer le plugin et après création des tables, je ne sais pas comment les lier ce qui fait que sur la page entreprises.html au lieu d’avoir la liste des catégories, j’ai directement la liste des entreprise de la table entreprise.
    Merci de m’aider s’il vous plait.
    Périclès

    • <div>
      	<BOUCLE_champs(FORMS_CHAMPS){titre=NomCat}{tri_donnee ligne_1}>
      	<table width="100%" border="0">
      	<B_reponses>
      	<tr>
      		<BOUCLE_reponses(FORMS_DONNEES){id_form=1}{doublons}{0,2}>
      			<td width="50%">
      				<a href="spip.php?page=fichecat&nom_cat=#VALEUR"><b>#VALEUR</b></a>
      			</td>
      		</BOUCLE_reponses>
      	</tr>
      
      	<BOUCLE_reponses_suite (BOUCLE_reponses)></BOUCLE_reponses_suite>
      
      </B_reponses>
      </table>
      </BOUCLE_champs>
      </div>

      Dans ce code, il vous faut modifier les parametres suivants pour les adapter à votre base :

      titre=NomCat -> NomCat est le nom de colonne de vos catégories id_form=1 -> est le numéro de la table virtuelle « catégorie » créee par le plugin Form&Table. Pour le connaitre, ouvrez votre table « catégorie » dans le panneau d’administration, et sur la gauche, vous pourrez lire cet ID.

      Il y a de grandes chances pour que vous ayez crée la table « entreprise » avant la table « catégorie », faisaint ainsi « d’entreprise » la id_form numéro 1. Il vous suffit donc de recuperer le bon ID et de le changer.

      Cordialement.

    • Péiclès

      Bonjour,
      Je suis de retour sur le projet.
      Je voudrais d’abord remercier JDW pour sa réponse à ma première question.
      Maintenant, j’ai réussi à mettre les numéro des tables dans le bon ordre mais je n’arrive tjrs pas à lier les deux tables.
      Qunad je choisis jointure ..., je n’arrive pas à préciser les table avec laquelle faire la jointure.
      Merci de votre aide

    Répondre à ce message

  • Bonjour,

    Comment faire une liste rouge, c’est à dire une liste de personnes qui ne souhaitent pas figurer dans l’annuaire ? J’ai une liste d’adhérents à une association et je veux mettre un annuaire en ligne, et j’ai prévu un champ Publication (Oui ou Non) de façon à ce que seules les adhérents ayant sélectionné Oui apparaissent dans l’annuaire. Je n’arrive pas à trouver la syntaxe pour filtrer correctement les enregistrements, avez-vous une idée ?

    Merci d’avance !

    Répondre à ce message

  • sur une boucle du type :

    <BOUCLE_champs(FORMS_CHAMPS){titre=nomduchamp}>
    <B_reponses>					<BOUCLE_reponses(FORMS_DONNEES){id_form=X}{0,5}{doublons}>

    le nombre de résultat ne se limite pas le critere 0,5 ne semble pas fonctionner , avez vous une idée ?

    Répondre à ce message

  • Bonjour,

    Je cherche toujours un moyen simple de lier des documents ajoutés avec les données d’une table.

    A priori le plus simple est d’ajouter des documents dans une rubrique et ensuite de trouver un moyen que ces documents (sans limite de nombre) s’affichent avec les valeur de la donnée sélectionnée.

    Exemple

    Activité 1
    tel etc.

    télécharger le programme (docx)
    télécharger l’affiche (docx2) etc.

    mais je ne trouve pas de moyen efficace pour gérer ceci avez vous une idée ?

    merci

    Répondre à ce message

  • 4

    Bonjour,

    avec une boucle du type ci dessous, je constate que le commentaire « nom de l’entreprise » s’affiche meme si la boucle ne renvoie pas de valeur. Normalement le propre de cette syntaxe est de permettre le nom affichage du texte entre B et Boucle

    Avez vous constaté cette difficulté ?

    merci

    Pierre

    <B_donnees>
    nom de l'entreprise
    <BOUCLE_donnees(FORMS_CHAMPS){titre=nom}>
     #VALEUR
    </BOUCLE_donnes>
    </B_donnees>
    • Oui, il semblerai que le plugin ne gere pas les valeurs nulles pour l’heure. :(

    • si jamais quelqu’un connait une astuce pour contourner le problème , n’hésitez pas à en faire part

    • En effet les valeurs nulles ne sont pas gérées comme d’habitude par les boucles du plugins, la seule solution que j’ai trouvée c’est de faire un test conditionnel.
      Dans mon cas, je l’ai placé dans le modèle « form_reponse_email_admin.html » et ça fonctionne.
      J’en ai profité pour faire une mise en page en html et mettre en place des liens cliquables vers les fichiers joints et les adresses mails.
      Par contre, les titres des blocs de question continuent de s’afficher, même si aucune info n’a été saisie dans le bloc.
      Au niveau sécurité je ne sais pas ce que ça vaut, au niveau du code, peut être moyen de faire plus propre avec un case...

      Extrait du code du modèle :

      <BOUCLE_reponses(FORMS_DONNEES){id_donnee}{tout}>
      <BOUCLE_form(FORMS){id_form}>	
      <BOUCLE_champs(FORMS_CHAMPS){tout}{id_form}{par rang}>
       [(#LESVALEURS|=={''}|?
      		{[(#TYPE|!={separateur}|?
      		{'',<div class='separateur'>#TITRE :</div>})]
      		,[(#TYPE|=={fichier}|?
      		{<div class='donnees'>#TITRE : <a href='#URL_SITE_SPIP/#LESVALEURS'>Lien vers le fichier joint</a></div>
      		,[(#TYPE|=={email}|?
      		{<div class='donnees'>#TITRE : <a href="mailto:#LESVALEURS">#LESVALEURS</a></div>
      		,<div class='donnees'>#TITRE : [(#LESVALEURS{','})] </div>
      		})]
      		})]
      		})]
      </BOUCLE_champs>
      </BOUCLE_form>
      </BOUCLE_reponses>
    • Afin d’afficher un texte conditionnel avant un champ j’ai trouvé cette solution :

      dans la gestion des tables :
      dans les propriétés du champ concerné

      -  Encapsuler le champ dans le code html :

      <span class='nomdunstyle'> texte a ajouter :</span> $1

      $1 est la variable, « texte a ajouter » n’apparaitra que si la variable n’est pas nulle

    Répondre à ce message

  • Bonjour, donc petit probleme, je demandes donc de l’aide à la très belle communauté Spip..
    Le site que je gères était en 19.1 et suite à pas mal de besoins et de soucis, j’ai MAJ vers 1.9.2c, tous remarches à merveilles, migration réussi ! sauf, y’en faut un ;) :
    J’ai un formulaire avec des réponses collectées sous l’ancienne version de ce magnifique plugin c.a.d. forms 1.9.1, et j’ai donc un soucis de visibilité des réponses dans la partie admin...
    Donc j’ai bien mais 92 réponses qui apparaissent, la pagination correspondante également, mais point de tableau de réponse... !? pourtant mes réponses exporté dans des articles à l’époque sont bien là (en même tps elles sont dans les article ... ) hum là je vois pas, donc la version de F&T et bien la dernière sur la Zone
    Donc :
    1- ces versions sont elles compatibles ?
    2 - non donc c’est normal, comment pourrais-je récuperer mes reponses dans l’admin ?
    3 - ça vient d’autre chose et là je cris : MAYDE MAYDE !

    En tous cas merci pour vos réponses !

    Répondre à ce message

  • 1

    Avec ce code,

    pour ajouter des EDIT pour crayon comment faut il présenter les choses ?
    <span class='#_nomboucle:EDIT{#CHAMP}'>#VALEUR{'<br />'}</span>
    ne fonctionne pas.

    merci

    • Bonjour,

      je n’ai jamais utilisé le crayon, désolé.

    Répondre à ce message

  • Ceci vous semblera peut être aller de soi, cependant je le précise tout de même.

    Si vous avez d’autres tables supplémentaires aux tables nécessaires à la création de cet annuaire il faut bien faire attention à ce que les noms des champs soient différents d’une table à l’autre.

    En effet lorsque l’on appelle un champ à l’intérieur d’une boucle forms cela peut créer des interférences entre les tables et les données s’affichent n’importe comment.

    Répondre à ce message

  • 1

    Qui sait si il est possible d’employer des espace, des apostrophes et ce genre de caractères dans le nommage des tables que l’on créé avec forms et tables.

    Répondre à ce message

  • 1

    Bonjour,
    Je suis débutant sur spip et j’ai besoin d’aide !
    Je souhaite créer un annuaire dynamique avec des liens hierarchique.
    J’ai bien pris connaissance de l’annuaire en 3 pages qui est super interessant mais en tant que débutant, je ne sais pas intégrer de code dans le squelette.

    Qui pourrait m’accompagner pour que je puisse créer mon infrastructure ?
    Voici mon mail : ph.belaich@free.fr ou envoyez moi votre mail.

    Merci pour votre aide

    • C’est toujours moi !

      Je suis prêt à payer !!!

    Répondre à ce message

  • 2

    je n’arrive pas à trier les résultats par ordre alphabétique. que ce soit dans une boucle avec « tri_donnee » ou avec le code pour permettre que le moteur de recherche de spip cherche sur nos tables...

    les résultats ne sont pas présentés par ordre alphabétique.

    D’où cela peut il venir ?

    • Avez vous bien utilisé le nom de champ réel de votre champ de tri ? Ils sont tous de type « ligne_x ». Pour le connaitre, un petit tour sur phpmyadmin, ou alors en déclarant le champ en « champ spécifiant », puis en analysant l’URL utilisé par spip pour le tri d’une colonne, dans l’espace privé, lorsque vous cliquez sur le nom d’une colonne.

    • bon, j’ai résolu la moitié du problème
      -  pour le tri à l’intérieur d’une boucle, mon problème est que j’avais ajouté le critère

      {tri_donnee ligne_1}

      dans la boucle (FORMS_CHAMPS) et non (FORMS_DONNEES)

      -  pour le squelette recherche.html, avec le code mentionné ci dessous par contre les résultats sur les données s’affichent dans le sens dans lequel les données ont été rentrées dans la table

    Répondre à ce message

  • 5

    Mon astuce pour afficher une image est d’utiliser un champ ligne de texte, d’utiliser l’uploader de SPIP (pour cela pensez a cocher « permettre l’ajout de fichiers » a la création de la table), puis en glisser/deposer, l’URL de mon image se retrouve dans ma ligne de texte.

    je ne comprend pas comment faire pour ajouter des images qui ensuite seront affichées. Je pense avoir compris le principe de leur affichage, mais je ne vois pas comment permettre de faire un glisser déposer lors de leur téléchargement ? comment proposer aux personnes qui vont implémenter la table d’ajouter leur image ?

    • En utilisant le systeme de téléchargement de spip.
      Je suppose que que vous savez ajouter une image dans un article : Parcourir, choisir l’image, télécharger. Et ensuite il suffit de glisser/deposer la miniature de l’image dans l’edition de l’article.

      Et bien on procede de la emme façon ici : Lors de l’ajout de donnée, ll’administrateur utilise le systeme de téléchargement de spip pour télécharger sa photo, et la depose en glisser/deposer dans le champ « image » qui est de type « ligne de texte ». Au lieu d’afficher une balise d’affichage d’image, l’URL de l’image va etre copié dans le champ.

      Nous avons donc grace à cela, en donnée, l’url de notre image téléchargée. Il suffit ensuite de l’afficher comme présenté dans la page « ficheent »

      En esperant que ce soit plus clair.

    • bon je viens de comprendre, voici mon explication au cas où il y aurait d’autres étourdis.

      dans l’espace privé , dans la zone de gestion des tables / appercu des données / modification des données, il y a sur la gauche la possibilité de télécharger une image.

      Une fois la chose faite, il faut glisser/deposer depuis l’icone d’image vers le champ zone de texte correspondant à l’image.

      et ca fonctionne.

    • désolé, je n’avais pas rechargé la page et je n’avais pas vu ta réponse, merci -

      Procéder ainsi pour ajouter des images , nécessite donc l’intervention d’un administrateur puisqu’on ne peut pas permettre dans le formulaire public d’alimentation de la table, à l’utilisateur, d’ajouter une image. Mais en tout cas ta technique fonctionne efficacement.

      Est il possible de procéder de la même façon pour permettre de lier des documents aux données, car l’option « fichier à télécharger » ne semble pas exploitable d’après les différents messages que je peux lire.

    • Je suppose oui, en utilisant une balise a href en lieu de l’img src.
      Je n’ai jamais essayé mais je pense que ça fonctionne.

    • je viens d’essayer ca fonctionne, cependant si tu utiliser ce lien sur un champ « fichier à télécharger » prévu par forms et tables ca ne fonctionne pas. Car les documents sont rangés dans un dossier « protege » apparement inexploitable.

    Répondre à ce message

  • 3

    serait il possible également de savoir quelles options tu as choisi pour la création des deux tables, et ensuite des champs de ces tables ?

    merci

    pietrus

    • Tables :

      -  Données non modifiable par l’utilisateur
      -  Réponse unique
      -  Données publiques. Les données enregitrées seront accessibles aux visiteurs du site.
      -  Modération... comme tu veux : )
      _
      |X| Permettre de joindre des documents aux données

      Champs :

      |X| ou | | ce champ est obligatoire. (Obligatoire si tu t’en sert dans tes criteres. Mais attention, ne met pas de champs obligatoire pour le champ de table liée, ça bug.)
      |X| ou | | champ specifiant. (Oui si tu veux trier par cette donnée dans ton panneau admin, sinon ça sert pas)
      |X| champ listable admin
      |X| champ listable publique
      |X| champ public

      Voila : )

    • merci pour ta rapidité,

      il n’y a pas un probleme d’affichage avec ta réponse ?

      Dans la documentation tu dis qu’il est nécessaire d’utiliser un champ de table lié. mais où cela ? dans la table « entreprises » ? je créé un champ categorie dont la nature est « jointure » je suppose.

      puisqu’il n’y a pas qu’un champ dans la table catégorie.

    • Si

      |X| ou | | ce champ est obligatoire. (Obligatoire si tu t’en sert dans tes criteres. Mais attention, ne met pas de champs obligatoire pour le champ de table liée, ça bug.)

      |X| ou | | champ specifiant. (Oui si tu veux trier par cette donnée dans ton panneau admin, sinon ça sert pas)

      |X| champ listable admin

      |X| champ listable publique

      |X| champ public

      Pour la jointure, oui c’est ça. Regarde sur l’image jointe a la doc.

    Répondre à ce message

  • 3

    une jolie contribution qui utilise les jointure entre table de f&t, pourtant peu documentées (oui j’avoue ...).

    C’est exactement pour ça que c’est fait, et c’est utilisé a bon escient !

    • comment utiliser ce (c’est un plugin ?) où trouver les fichiers ! merci !

    • Non ce n’est pas un plugin. Le plugin, c’est Forms&Tables disponible en téléchargement ici

      Cette doc s’implente à la main, ce n’est pas un code Prêt-A-Tourner (j’aime cette expression :p).

      Les 3 pages de code sont à placer dans des pages squelettes et à grandement modifier pour adapter à votre config spip.

      Je propose « juste » le mécanisme :)

    • Merci pour ta réponse !

      Bon courage !

    Répondre à ce message

  • 1

    Bravo !
    Cela manquait, c’est exactement ce que cherchais !

    • Ca fait plaisir de savoir que ça peut en aider certains ! :D

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom