Aller au contenu

SPIP : équivalent d'un GROUP BY dans une boucle


captain_torche

Sujets conseillés

Je suis en train d'essayer de limiter les résultats de boucle aux articles ayant un surtitre différent.

Mes surtitres sont de la forme aaaa-mm-jj, et je souhaiterais faire une première boucle affichant quatre jours, tous différents (donc quatre surtitre différents), pour ensuite faire une nouvelle boucle listant tous les articles correspondant à chaque surtitre.

Comment pourrais-je le réaliser ?

Actuellement, ma boucle est de la forme :

<BOUCLE_dates(ARTICLES){par surtitre}{surtitre>=(#DATE|couper{10})}{0,4}>

qui fonctionne parfaitement, mais ne me groupe pas les surtitres identiques.

J'ai bien essayé les filtres "unique" et "doublons", mais ils ne changent rien.

Le filtre "unique", utilisé dans les résultats de la boucle, fonctionne bien mais supprime juste les résultats ayant un titre identique, ce qui fait que je n'ai plus mes 4 résultats.

Je précise également, au cas où, que je n'ai pas la main sur la structure des articles : je ne peux rien modifier de ce côté-là.

Je précise également que je suis sous SPIP 1.8.3.

Merci d'avance !

Lien vers le commentaire
Partager sur d’autres sites

Je ne comprends pas trop...

* Pourquoi mettre la date dans le surtitre ?

* "pour ensuite faire une nouvelle boucle listant tous les articles correspondant à chaque surtitre" : comment tu fais correspondre des articles à un surtitre ?

Lien vers le commentaire
Partager sur d’autres sites

Le surtitre correspond à la date d'un évènement. Ne me demande pas pourquoi, c'est comme ça ;) (Je travaille sur une base existante, et je ne peux rien modifier de ce côté).

Comme le surtitre est une date (ex: 2006-12-15), et qu'il peut y avoir plusieurs articles possédant ce surtitre, il me suffit de faire ensuite une boucle du type

<BOUCLE_articles(ARTICLES){surtitre=#SURTITRE}>

à l'intérieur de la boucle précédente.

Le tout étant d'obtenir quelque chose du genre:

2006-12-15

- Evenement 1

- Evenement 2

2006-12-16

- Evenement 3

- Evenement 4

- Evenement 5

Lien vers le commentaire
Partager sur d’autres sites

Ben moi je ferai ça, est-ce que c'est ce que tu as fait ?

<BOUCLE_dates(ARTICLES){par surtitre}{surtitre>=(#DATE|couper{10})}{0,4}>
<BOUCLE_articles(ARTICLES){surtitre=#SURTITRE}>
[<h2>(#SURTITRE|unique)</h2>]
#TITRE
</BOUCLE_articles>
</BOUCLE_dates>

Lien vers le commentaire
Partager sur d’autres sites

J'ai essayé, et ça fonctionne à moitié ;)

Si je suis dans le cas que j'ai cité, j'ai deux articles avec le surtitre "2006-12-15", et trois avec le surtitre "2006-12-16".

La boucle que tu me montres me fait ressortir les deux articles du 15 et deux articles du 16, aucun du 17 ni 18 (ce que j'aimerais pouvoir faire : tous les articles du 15 au 18).

Lien vers le commentaire
Partager sur d’autres sites

Ok, dont faut virer la limite {0,4}. Ensuite, pour ne récupérer que les articles des 4 derniers jours, c'est assez délicat. Le critère {age} est fait pour ça, mais vu que les dates sont dans les surtitres, ça aide pas.

Je ferai donc un peu de PHP, quelque chose comme ça :

<?php
$quatrejours = time() - 4 * 24 * 3600;
$date = date("Y-m-d",$quatrejours);
?>
<BOUCLE_dates(ARTICLES){par surtitre}>
<?php
if ([(#SURTITRE|textebrut)] >=$date) {
?>
[<h2>(#SURTITRE|unique)</h2>]
#TITRE
<?php
}
?>
</BOUCLE_dates>

Je n'ai pas testé, et je ne sais pas si ça va fonctionner, notamment au niveau du if...

Lien vers le commentaire
Partager sur d’autres sites

Je regarde ça lundi, et je te tiens au courant.

Merci beaucoup de t'être penché dessus, en tout cas.

Et je dois t'avouer que ton petit memento (spip libre) m'est très utile ;)

Avec plaisir ;)

Tiens nous au courant !

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...