Ecrire sa propre balise OU faire une jointure

Bonjour

Je me souviens qu'il est possible d'écrire sa propre balise sous spip, mais je n'ai pas trouvé la doc sur internet (il faut dire que spip-contrib ne répond pas à l'heure où je rédige ce message : erreur mysql)
J'ai plusieurs tables mysql (ISAM donc pas de clé étrangère) et je dois faire des jointures entre ces tables (parfois jointures classiques, parfois LEFT JOIN).

J'ai par exemple les tables odb_ref_departement, odb_ref_etablissement et odb_candidats suivantes :

odb_departement
---------------
id
departement

odb_etablissement
-----------------
id
etablissement
id_departement

odb_candidats
-------------
id_saisie
id_table
nom
prenoms
etablissement
serie
departement

NOTE : dans la table odb_candidats, etablissement est un id_etablissement (mal nommé, donc), serie un id_serie, departement un id_departement, etc.

et je souhaiterai afficher les informations d'un candidat en fonction de l'établissement et la série sélectionnés dans une liste input.
Pour l'instant, aucun problème pour commencer, mais j'ai besoin de votre aide pour pouvoir faire la jointure entre odb_candidats et odb_ref_etablissement dans l'objectif d'afficher le nom de l'établissement et non son identifiant.

Voici mon code actuel si cela peut vous aider :

   <form name='liste_candidats' method='GET' action='spip.php'>
      <input type='hidden' name='page' value='liste_candidats'>
      <select name='etablissement' onchange="document.forms['liste_candidats'].submit();">
         <OPTION VALUE=''>-=[&Eacute;tablissements]=-</OPTION>
         <BOUCLE_departement(ODB_REF_DEPARTEMENT){par departement}>
            <optgroup label='#DEPARTEMENT'>
            <BOUCLE_etablissement(ODB_REF_ETABLISSEMENT){id_departement=#ID}{par etablissement}>
               <OPTION VALUE='#ID' >#ETABLISSEMENT</OPTION>
            </BOUCLE_etablissement>
            </optgroup>
         </BOUCLE_departement>
      </select>
   </form>

   <B_candidats>
   <p>#PAGINATION</p>
   <table>
      <BOUCLE_candidats(ODB_CANDIDATS){annee=2007}{etablissement}{par nom, prenoms}{pagination}>
         <tr><th>#ID_TABLE</th><td>#NOM #PRENOMS</td></tr>
      </BOUCLE_candidats>
   </table>

Merci pour votre aide
Cédric

Le 11/05/07, Cédric PROTIERE a écrit :

Bonjour

Je me souviens qu'il est possible d'écrire sa propre balise sous spip,
mais je n'ai pas trouvé la doc sur internet (il faut dire que
spip-contrib ne répond pas à l'heure où je rédige ce message : erreur mysql)

Voir

http://www.spip-contrib.net/CreerSaBalise

--
@plus

Jacques

Pour les lyonnais++ spip-lyon@rezo.net http://spip-party.net/-Lyon-
Inscription : http://listes.rezo.net/mailman/listinfo/spip-lyon

Entre une fenotte et un bon mâchon, n'hésite pas, gone, n'hésite pas.

Le 12/05/07, Christophe Danaux a écrit :

*Toujours répondre sur la liste STP et en rapport avec l'énoncé*

Et pour aller plus loin, peut-on aussi créer une nouvelle boucle ?

Du genre : J'ai une base de données spip_abonnes pour une lettre d'info

Une table abonnes ?

et je voudrais lister ces abonnés sur une page en spip avec des balises
#ID_ABONNE, #NOM_ABONNE et #MAIL_ABONNE.

Pour cela, ne faudrait-il pas créer une boucle <BOUCLEn(ABONNES){}> ?

Sur http://www.spip.net/fr_article3368.html il est indiqué :

Détection automatique de tables SQL et de jointures

Dans un squelette comportant BOUCLE_a(xxx), la table xxx peut être
n'importe quelle table SQL connue du serveur SQL. SPIP demandera alors
au serveur SQL de décrire cette table, ce qui lui permettra de
compiler le squelette en interprétant toute balise #NOM comme un accès
au champ `xxx`.nom s'il existe. Ces champs sont également repérés dans
les critères des boucles.

Dans un squelette comportant BOUCLE_a(table table1 ... tablen), les
tables supplémentaires seront vues comme des candidates à une
jointure, à travers les champs homonymes. Des exemples plus concrets
seront donnés dans la documentation

Tout cela à priori pour Spip 1.9x

--
@plus

Jacques

Pour les lyonnais++ spip-lyon@rezo.net http://spip-party.net/-Lyon-
Inscription : http://listes.rezo.net/mailman/listinfo/spip-lyon

Entre une fenotte et un bon mâchon, n'hésite pas, gone, n'hésite pas.

Jacques J. a écrit :

Le 11/05/07, Cédric PROTIERE a écrit :
  

Bonjour

Je me souviens qu'il est possible d'écrire sa propre balise sous spip,
mais je n'ai pas trouvé la doc sur internet (il faut dire que
spip-contrib ne répond pas à l'heure où je rédige ce message : erreur mysql)
    
Voir
Plugin pour des balises de comptage - SPIP-Contrib
CreerSaBalise

Un grand merci (j'ai rédigé une réponse en début d'après midi qui ne semble pas être arrivée).
Cela fonctionne très bien, et la possibilité de développer un plugin est très pratique, surtout une fois que j'ai découvert comment récupérer un autre champ ($annee=champ_sql('annee',$p); )

J'en profite pour faire un témoignage : si je commence mon fichier par la balise <? comme c'est le cas dans Plugin pour des balises de comptage - SPIP-Contrib , alors le code de cette fonction s'affiche en début de page. Il faut remplacer <? par <?php et tout rentre dans l'ordre...

A bientôt
Cédric