Version complète: sur le forum Webmaster Hub : SPIP : équivalent d'un GROUP BY dans une boucle
Webmaster Hub > Création et exploitation de Sites Internet > Systèmes de publication
captain_torche
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 :
CODE
<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 !
Loupilo
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 ?
captain_torche
Le surtitre correspond à la date d'un évènement. Ne me demande pas pourquoi, c'est comme ça wink.gif (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
Loupilo
Ben moi je ferai ça, est-ce que c'est ce que tu as fait ?

CODE
<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>
captain_torche
J'ai essayé, et ça fonctionne à moitié wink.gif
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).
Loupilo
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 :
CODE
<?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...
captain_torche
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 wink.gif
Loupilo
CITATION(captain_torche @ samedi 16 décembre 2006, 12h49) *
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 wink.gif


Avec plaisir wink.gif
Tiens nous au courant !
captain_torche
Je suis en train d'y penser : ne serait-il pas plus facile de créer un filtre spécifique, la fonction "spip_abstract_select" prévoyant déjà le GROUP BY ?
captain_torche
Bon, bah apparemment ça n'a pas fonctionné.
Je cherche encore à regarder au niveau du code, mais je n'arrive pas à rajouter un filtre dans la boucle.
Loupilo
CITATION(captain_torche @ mardi 19 décembre 2006, 11h41) *
Bon, bah apparemment ça n'a pas fonctionné.


Pour quelle raison ? Erreur PHP ? Page blanche ? Pas le résultat escompté ?
captain_torche
Page blanche wink.gif
Il ne me retournait tout simplement pas le résultat escompté.

De toutes façons, on va arrêter de se prendre la tête dessus : l'organisation de la page a changé wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.