[SPIP Zone] Agenda 2 et jointures

Bonjour,

La boucle suivante renvoie une erreur de compilation sur le critère de jointure.

<BOUCLE_articles_agenda(ARTICLES){par evenements.date_debut}{0,10}{doublons}>

C'est pas sensé passer ?
(spip 2.0.10 et agenda 2 à jour en rev 36562)

A bientôt
    Simon

Personne n'a de réponse ?
C'est bien dommage, ce genre de jointure est pourtant très utile dans l'affichage d'un agenda...

A bientôt
    Simon

Simon Camerlo a écrit :

Bonjour,

La boucle suivante renvoie une erreur de compilation sur le critère de jointure.

<BOUCLE_articles_agenda(ARTICLES){par evenements.date_debut}{0,10}{doublons}>

C'est pas sensé passer ?
(spip 2.0.10 et agenda 2 à jour en rev 36562)

A bientôt
   Simon

Ça ne serait pas plutôt quelque chose de ce genre :
<BOUCLE_articles_agenda(ARTICLES evenements){par evenements.date_debut}{0,10}{doublons}>

La jointure faut l'indiquer dans les parenthèses aussi me semble-t-il...

Le 31 mars 10 à 05:29, Simon Camerlo a écrit :

Personne n'a de réponse ?
C'est bien dommage, ce genre de jointure est pourtant très utile dans l'affichage d'un agenda...

A bientôt
  Simon

Simon Camerlo a écrit :

Bonjour,

La boucle suivante renvoie une erreur de compilation sur le critère de jointure.

<BOUCLE_articles_agenda(ARTICLES){par evenements.date_debut}{0,10}{doublons}>

C'est pas sensé passer ?
(spip 2.0.10 et agenda 2 à jour en rev 36562)

A bientôt
  Simon

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Pas si j'en crois : SPIP 2.0 - SPIP

L'écriture (TABLE1 table2) sert surtout à accéder à des champs de table2 par des balises #XXX dans la boucle (à condition que #XXX ne soit pas défini aussi pour TABLE1).

Mais de toute manière ça ne marche pas non plus...

A bientôt
    Simon

Teddy Payet a écrit :

Ça ne serait pas plutôt quelque chose de ce genre :
<BOUCLE_articles_agenda(ARTICLES evenements){par evenements.date_debut}{0,10}{doublons}>

La jointure faut l'indiquer dans les parenthèses aussi me semble-t-il...

Le 31 mars 10 à 05:29, Simon Camerlo a écrit :

Personne n'a de réponse ?
C'est bien dommage, ce genre de jointure est pourtant très utile dans l'affichage d'un agenda...

A bientôt
  Simon

Simon Camerlo a écrit :

Bonjour,

La boucle suivante renvoie une erreur de compilation sur le critère de jointure.

<BOUCLE_articles_agenda(ARTICLES){par evenements.date_debut}{0,10}{doublons}>

C'est pas sensé passer ?
(spip 2.0.10 et agenda 2 à jour en rev 36562)

A bientôt
  Simon

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Je n'ai pas le lien sous la main, mais regarde sur programmer.Spip.org...

Cordialement,

Teddy Payet

Le 31 mars 2010 à 08:39, Simon Camerlo <scamerlo.work@gmail.com> a écrit :

Pas si j'en crois : SPIP 2.0 - SPIP

L'écriture (TABLE1 table2) sert surtout à accéder à des champs de table2 par des balises #XXX dans la boucle (à condition que #XXX ne soit pas défini aussi pour TABLE1).

Mais de toute manière ça ne marche pas non plus...

A bientôt
  Simon

Teddy Payet a écrit :

Ça ne serait pas plutôt quelque chose de ce genre :
<BOUCLE_articles_agenda(ARTICLES evenements){par evenements.date_debut}{0,10}{doublons}>

La jointure faut l'indiquer dans les parenthèses aussi me semble-t-il...

Le 31 mars 10 à 05:29, Simon Camerlo a écrit :

Personne n'a de réponse ?
C'est bien dommage, ce genre de jointure est pourtant très utile dans l'affichage d'un agenda...

A bientôt
Simon

Simon Camerlo a écrit :

Bonjour,

La boucle suivante renvoie une erreur de compilation sur le critère de jointure.

<BOUCLE_articles_agenda(ARTICLES){par evenements.date_debut}{0,10}{doublons}>

C'est pas sensé passer ?
(spip 2.0.10 et agenda 2 à jour en rev 36562)

A bientôt
Simon

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Le 31/03/10 08:17, Teddy Payet a écrit :

Ça ne serait pas plutôt quelque chose de ce genre :
<BOUCLE_articles_agenda(ARTICLES evenements){par
evenements.date_debut}{0,10}{doublons}>

il ne peut pas y avoir de jointure depuis la table spip_articles vers
la table spip_evenements.
rien dans la table spip_articles (aucun champ) ne pointe 'directement'
(ou indirectement en passant par une 'table de jointure dédiée') sur la
table spip_evenements.

à l'inverse, si l'on part de EVENEMENTS comme table principale
(<BOUCLE_e(EVENEMENTS){...}>) alors, *dans ce sens là* on peut établir
une jointure sur spip_articles puisque spip_evenements possède bien un
champ id_article.

ainsi :
   <BOUCLE_aa(EVENEMENTS){par date_debut}{0,10}{doublons}>
   (#ID_RUBRIQUE) #ID_ARTICLE- #LESAUTEURS - #TITRE<br />
   </BOUCLE_aa>
m'affichera bien :
- l'id_rubrique de l'article (unique) lié à chaque évènement ;
- l'id_article de l'article (unique) lié à chaque évènement ;
- le nom/lien de l'auteur de l'article (unique) lié à chaque évènement ;
- le titre de *l'évènement* (*pas* de l'article)

! attention !
si l'on veut récupérer des éléments (champs) de la table spip_articles,
par exemple #CHAPO, alors *il faut* préciser le nom de la table que l'on
veut joindre à la table principale.
dans notre cas, il faut écrire :
   <BOUCLE_aa(EVENEMENTS articles){par date_debut}{0,10}{doublons}>
pour pouvoir accéder à :
   #CHAPO, #PS, #SURTITRE, #SOUSTITRE...
bref, à tous les champs *non homonymes* de spip_articles.

pour en revenir à la question de Simon, il n'y a d'autre solution
que de passer par 2 boucles imbriquées (et sans doute jouer avec
#TOTAL_BOUCLE et |unique).

denisb a écrit :

Le 31/03/10 08:17, Teddy Payet a écrit :

Ça ne serait pas plutôt quelque chose de ce genre :
<BOUCLE_articles_agenda(ARTICLES evenements){par
evenements.date_debut}{0,10}{doublons}>

il ne peut pas y avoir de jointure depuis la table spip_articles vers
la table spip_evenements.
rien dans la table spip_articles (aucun champ) ne pointe 'directement'
(ou indirectement en passant par une 'table de jointure dédiée') sur la
table spip_evenements.
(...)

C'est bête que la recherche de concordance sur les id_* ne se fasse pas dans ce sens...
Comme on a déjà :
- soit l'id_x est présent dans la table principale => jointure
- soit la table table1_table2 (ou table2_liens ?) existe => jointure
J'ai pensé qu'en dernier recours spip regarderait la concordance dans l'autre sens : si l'id_x est présent dans la table 2, alors on joint.
C'est mathématiquement possible puisque le lien est défini, le tout est de le rechercher, ce que le compilateur ne fait donc pas, j'ai appris un truc...

! attention !
si l'on veut récupérer des éléments (champs) de la table spip_articles,
par exemple #CHAPO, alors *il faut* préciser le nom de la table que l'on
veut joindre à la table principale.
dans notre cas, il faut écrire :
  <BOUCLE_aa(EVENEMENTS articles){par date_debut}{0,10}{doublons}>
pour pouvoir accéder à :
  #CHAPO, #PS, #SURTITRE, #SOUSTITRE...
bref, à tous les champs *non homonymes* de spip_articles.

oui, ça je le précisais aussi.

pour en revenir à la question de Simon, il n'y a d'autre solution
que de passer par 2 boucles imbriquées (et sans doute jouer avec
#TOTAL_BOUCLE et |unique).

Je suis passé par deux boucles successives avec des #ARRAY, moins gourmand que des boucles imbriquées, mais bon, ça complique l'écriture.

A bientôt
    Simon

Le 31 mars 2010 à 09:38, Simon Camerlo a écrit :

denisb a écrit :

Le 31/03/10 08:17, Teddy Payet a écrit :

Ça ne serait pas plutôt quelque chose de ce genre :
<BOUCLE_articles_agenda(ARTICLES evenements){par
evenements.date_debut}{0,10}{doublons}>

il ne peut pas y avoir de jointure depuis la table spip_articles vers
la table spip_evenements.
rien dans la table spip_articles (aucun champ) ne pointe 'directement'
(ou indirectement en passant par une 'table de jointure dédiée') sur la
table spip_evenements.
(...)

C'est bête que la recherche de concordance sur les id_* ne se fasse pas dans ce sens...
Comme on a déjà :
- soit l'id_x est présent dans la table principale => jointure
- soit la table table1_table2 (ou table2_liens ?) existe => jointure
J'ai pensé qu'en dernier recours spip regarderait la concordance dans l'autre sens : si l'id_x est présent dans la table 2, alors on joint.
C'est mathématiquement possible puisque le lien est défini, le tout est de le rechercher, ce que le compilateur ne fait donc pas, j'ai appris un truc...

ce serait possible, mais attention, c'est une jointure 1=>N donc cela va produire potentiellement N resultats pour 1 article, sauf a utiliser un groub_by.

Cédric

a écrit : Oui, c’est le but. Ou alors on peut aussi les filtrer avec |unique, mais dans certains cas c’est beaucoup plus optimal que de passer par plusieurs boucles, par exemple : je veux tous les articles liés à des événements se déroulant la semaine prochaine classés par date de début, je comptais faire : <BOUCLE_semaine(ARTICLES){evenements.date_debut <= #GET{dimanche}}{evenements.date_fin >= #GET{lundi}}{par evenements.date_debut}> [(#TITRE|unique)
] </BOUCLE_semaine> Sans oublier les éventuels autres critères à ajouter à cette boucle, mais comme la jointure bloque, je suis passé par les contorsions évoquées plus haut. A bientôt Simon

ou {fusion id_article} pour faire un group by

Cédric

Le 31/03/10 10:06, Simon Camerlo a écrit :

#GET{dimanche}}{evenements.date_fin>= #GET{lundi}}{par evenements.date_debut}>

puis-je te demander comment tu calcules tes dimanche et lundi ?

perso j'en suis encore à :

[(#SET{lundi_prochain,
     #VAL{Y-m-d 00:00:00}|date{#VAL{next Monday}
                         |strtotime{#DATE|affdate{U}}}
})]
[(#SET{dimanche_apres,
     #VAL{Y-m-d 23:59:59}|date{#VAL{+6days}
                         |strtotime{#GET{lundi_prochain}|affdate{U}}}
})]

qui me permettent de lancer :

   <BOUCLE_aa(EVENEMENTS) {date_debut > #GET{lundi_prochain}}
                          {date_fin < #GET{dimanche_apres}}>

Alors, c'est un peu un truc de ninja dans mon cas, mais ça marche et c'est 100% spip + agenda :

[(#SET{dimanche,#DATE|agenda_jourdecal{#VAL{7}|moins{#DATE|affdate{N}},Y-m-d 99:99}})]
[(#SET{lundi,#GET{dimanche}|agenda_jourdecal{-7,Y-m-d 99:99}})]

Voilà :slight_smile:

A bientôt
    Simon

denisb a écrit :

Le 31/03/10 10:06, Simon Camerlo a écrit :

#GET{dimanche}}{evenements.date_fin>= #GET{lundi}}{par evenements.date_debut}>

puis-je te demander comment tu calcules tes dimanche et lundi ?

perso j'en suis encore à :

[(#SET{lundi_prochain,
    #VAL{Y-m-d 00:00:00}|date{#VAL{next Monday}
                        |strtotime{#DATE|affdate{U}}}
})]
[(#SET{dimanche_apres,
    #VAL{Y-m-d 23:59:59}|date{#VAL{+6days}
                        |strtotime{#GET{lundi_prochain}|affdate{U}}}
})]

qui me permettent de lancer :

  <BOUCLE_aa(EVENEMENTS) {date_debut > #GET{lundi_prochain}}
                         {date_fin < #GET{dimanche_apres}}>

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Pardon, c'est :
[(#SET{lundi,#GET{dimanche}|agenda_jourdecal{-8,Y-m-d 99:99}})]
sinon tu n'auras les événements qu'à partir de lundi à 99h99, ce qui en laisse ma fois peu.

A bientôt
    Simon

Simon Camerlo a écrit :

Alors, c'est un peu un truc de ninja dans mon cas, mais ça marche et c'est 100% spip + agenda :

[(#SET{dimanche,#DATE|agenda_jourdecal{#VAL{7}|moins{#DATE|affdate{N}},Y-m-d 99:99}})]
[(#SET{lundi,#GET{dimanche}|agenda_jourdecal{-7,Y-m-d 99:99}})]

Voilà :slight_smile:

A bientôt
   Simon

denisb a écrit :

Le 31/03/10 10:06, Simon Camerlo a écrit :

#GET{dimanche}}{evenements.date_fin>= #GET{lundi}}{par evenements.date_debut}>

puis-je te demander comment tu calcules tes dimanche et lundi ?

perso j'en suis encore à :

[(#SET{lundi_prochain,
    #VAL{Y-m-d 00:00:00}|date{#VAL{next Monday}
                        |strtotime{#DATE|affdate{U}}}
})]
[(#SET{dimanche_apres,
    #VAL{Y-m-d 23:59:59}|date{#VAL{+6days}
                        |strtotime{#GET{lundi_prochain}|affdate{U}}}
})]

qui me permettent de lancer :

  <BOUCLE_aa(EVENEMENTS) {date_debut > #GET{lundi_prochain}}
                         {date_fin < #GET{dimanche_apres}}>

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone