[spip-dev] Jointures statiques

Bonjour,

Ce message s'adresse aux "spécialistes" des jointures automatiques :wink:

J'ai 3 tables :
- spip_famille avec les champs : id_famille, id_lieu, nom, etc.
- spip_enfants avec les champs : id_enfant, id_famille, nom, etc.

Comment déclarer ces tables pour que les boucles suivantes fonctionnent?

<BOUCLE_enfants(ENFANTS){id_lieu=1}>#NOM</BOUCLE_enfants>
<BOUCLE_enfants(ENFANTS)>#NOM #ID_LIEU</BOUCLE_enfants>

Le but étant de récupérer le champ d'un parent en évitant deux boucles imbriquées... C'est possible ça ?

Pat

Il est possible que :

<BOUCLE_enfants(ENFANTS familles){id_lieu=1}>#NOM</BOUCLE_enfants>
<BOUCLE_enfants(ENFANTS familles)>#NOM #ID_LIEU</BOUCLE_enfants>

puissent fonctionner.

De même je pense que

<BOUCLE_enfants(ENFANTS){id_lieu=1}>#NOM</BOUCLE_enfants> (si tu n'as pas besoin des #CHAMP de la table familles) doit pouvoir fonctionner en indiquant que cette table peut être jointe, soit via le pipeline interfaces tel que http://zone.spip.org/trac/spip-zone/browser/plugins/contacts_et_organisations/trunk/base/contacts.php#L33 ou via la déclaration de l'objet éditorial comme http://zone.spip.org/trac/spip-zone/browser/plugins/contacts_et_organisations/trunk/base/contacts.php#L97 et suivants.

Cependant, pour obtenir des #CHAMP d'une autre table dans ta boucle, soit la table est déclarée explicitement dans la boucle (dans les parenthèses), soit il faut déclarer une exception pour le champ un peu comme là http://zone.spip.org/trac/spip-zone/browser/core/plugins/mots/base/mots.php#L39.

Avec un critère on peut tricher (mais je dis bien tricher !) (ENFANTS){familles} également en ajoutant la table dans les jointures_explicites (c'est à dire faire croire que la table a été mises dans les parenthèses de la boucle) pour pouvoir obtenir les #CHAMP de l'autre table. Utilisé par exemple dans le critère {gis} ou celui là http://zone.spip.org/trac/spip-zone/browser/plugins/contacts_et_organisations/trunk/contacts_fonctions.php#L175 .
Mais ça fait ajouter un critère.

C'est http://core.spip.org/projects/spip/repository/entry/spip/ecrire/public/references.php#L233 qui fait que les #CHAMP ne sont pris à l'extérieur de la boucle dans une table jointe que si c'est une jointure explicite.

MM.