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
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" /> <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é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é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 ».
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 : |