A propos de dates...

Salut la liste,

Petite interrogation à propos de dates... J'aimerais afficher la liste
d'années puis la liste des mois de celles-ci qui contiennent des
articles. En gros, si on a un article publié en juin 2006 et un autre
en novembre 2007, il y aurait un lien vers l'année 2006 (qui une fois
cliquée, afficherait le mois de juin, qui une fois cliqué, afficherait
l'article), et un autre vers l'année 2007 (même principe pour novembre
2007).

J'ai donc une première boucle m'affichant les années contenant des articles :

<BOUCLE_annees(ARTICLES){id_rubrique}{lang}{par date}{inverse}{doublons}>
[<li [class="(#EXPOSE|?{current})"]>
   <a href="#URL_RUBRIQUE&an=[(#DATE|annee)]">((#DATE|annee|unique))</a>
</li>]
</BOUCLE_annees>

Et une seconde qui est censée me sortir les mois en fonction de
l'année passée en paramètre :

<BOUCLE_mois(ARTICLES){id_rubrique}{annee_relatif=???}{lang}{par
date}{inverse}>
[<li [class="(#EXPOSE|?{current})"]>
   <a href="#URL_RUBRIQUE&mois=[(#DATE|mois)]">(#DATE|nom_mois|couper{1}|majuscules)</a>
</li>]
</BOUCLE_mois>

Seulement, je ne trouve pas par quoi remplacer le ???, et je ne suis
même pas certain que j'utilise le bon critère de tri. J'ai essayé avec
un simple #ENV{an}, ça ne fonctionne pas, et quand bien même je désire
juste afficher #ENV{an} alors qu'il se situe dans l'URL, il n'affiche
rien…

Si quelqu'un a une idée pour afficher ces mois en fonction de l'année
sélectionnée...

Merci d'avance :wink:

Gratz

Gratouille a écrit :

Salut la liste,

Petite interrogation à propos de dates... J'aimerais afficher la liste
d'années puis la liste des mois de celles-ci qui contiennent des
articles. En gros, si on a un article publié en juin 2006 et un autre
en novembre 2007, il y aurait un lien vers l'année 2006 (qui une fois
cliquée, afficherait le mois de juin, qui une fois cliqué, afficherait
l'article), et un autre vers l'année 2007 (même principe pour novembre
2007).

J'ai donc une première boucle m'affichant les années contenant des articles :

<BOUCLE_annees(ARTICLES){id_rubrique}{lang}{par date}{inverse}{doublons}>
[<li [class="(#EXPOSE|?{current})"]>
   <a href="#URL_RUBRIQUE&an=[(#DATE|annee)]">((#DATE|annee|unique))</a>
</li>]
</BOUCLE_annees>

Et une seconde qui est censée me sortir les mois en fonction de
l'année passée en paramètre :

<BOUCLE_mois(ARTICLES){id_rubrique}{annee_relatif=???}{lang}{par
date}{inverse}>
[<li [class="(#EXPOSE|?{current})"]>
   <a href="#URL_RUBRIQUE&mois=[(#DATE|mois)]">(#DATE|nom_mois|couper{1}|majuscules)</a>
</li>]
</BOUCLE_mois>

Seulement, je ne trouve pas par quoi remplacer le ???, et je ne suis
même pas certain que j'utilise le bon critère de tri. J'ai essayé avec
un simple #ENV{an}, ça ne fonctionne pas, et quand bien même je désire
juste afficher #ENV{an} alors qu'il se situe dans l'URL, il n'affiche
rien...

Si quelqu'un a une idée pour afficher ces mois en fonction de l'année
sélectionnée...

Merci d'avance :wink:

Gratz
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP

Hello ^^,

En fait ton problème peut se régler en 2 coups de cuillères à boucles :
Vu ici : Les filtres de SPIP - SPIP
et la partie qui te concerne :
<BOUCLE_blog2(ARTICLES){par date}{inverse}>
    [<hr /><h1>(#DATE|annee|unique)</h1>]
        [<h2>(#DATE|affdate{'Y-m'}|unique|nom_mois)</h2>]
             <a href="#URL_ARTICLE">#TITRE</a><br />
</BOUCLE_blog2>

voili voilou,

Cordialement,
Mike

Merci pour la réponse rapide, mais j'avais déjà trouvé cette solution,
qui est la plus répandue... J'aurais peut-être dû le préciser dans ma
demande initiale.

Cependant, ce que je désire, c'est que quand on clique sur un lien
type "2006" que les mois où il existe des articles publiés s'affichent
et soient cliquables, et qu'une fois un mois choisi, le premier
article de ce mois s'affiche ?

C'est quelque chose dans le genre de ce qu'on peut trouver sur ce lien :

http://article.gmane.org/gmane.comp.web.spip.user/114345/match=année

Mais ça ne fonctionne pas chez moi, du coup, je cherche un autre
moyen... C'est là toute ma difficulté :wink:

Gratz

"Gratouille" <chezlegratouille@free.fr> a écrit
C'est quelque chose dans le genre de ce qu'on peut trouver sur ce lien :
http://article.gmane.org/gmane.comp.web.spip.user/114345/match=année
Mais ça ne fonctionne pas chez moi,

Quel est ton problème ?
Stanislas

Eh bien pour le lien que j'ai donné par exemple, le fait d'utiliser le
critère "{annee_relatif=#ENV{an}}" ne donne rien. Par exemple, quand
je veux afficher "#ENV{an}" simplement (dans un <p> disons), cela ne
me retourne rien alors qu'il est bien présent dans l'URL. Du coup, ma
boucle ne retourne rien, et je n'arrive donc pas à mes fins :wink:

Je ne me trompe pas en disant que #ENV{an} équivaut à récupérer une
variable passée dans l'url (via le HTTP quoi), si ? Mon url
ressemblant à celle-ci : http//site.com/spip.php?an=1 par exemple, si
on prend l'année 2006 avec le script présent sur l'url cité
précédemment.

Gratz

Re la liste,

Pour ceux que ça intéresse et qui veulent se prendre la tête, voilà
comment j'affiche la liste des années suivie, sur clic d'une année, de
la liste des mois qui contiennent des articles publiés. En gros, ça
donne quelque chose comme :

--------------------------------------------------------------------------------------------
(2007) - (2005) - (2004) - (1999)
J A J J S D
// et le traitement désiré après (sur les articles sélectionnés)
--------------------------------------------------------------------------------------------

Voici le traitement, qui, si cela plaît à quelqu'un, peut le
simplifier avec les boucles spip (les traitements date = #ENV{year} ne
fonctionnent pas chez moi... lapin compris) :

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                <B_presse_annees>
                <ul class="annee">
                <?php
                    // compteur pour sélectionner la première année
par défaut si aucune n'est passée en param
                    $cpt_annee = 0;
                ?>
                <BOUCLE_presse_annees(ARTICLES){id_rubrique}{lang}{par
date}{inverse}>
                    <?php
                    // sauvegarde de l'année de l'article
                    $sauv_annee = '[(#DATE|annee|unique)]';

                    if ($sauv_annee != '') {
                        $cpt_annee += 1;
                        // sauvegarde première année
                        if ($cpt_annee == '1') {
                            $first_year = $sauv_annee;
                        }

                        // si l'année paramètre == l'année de
l'article, on affiche celle-ci une seule fois en sélectionnée
                        if ($sauv_annee == $_GET['year']) {
                    ?>
                            <li class="current">
                                <a href="#URL_RUBRIQUE&year=<?php echo
$sauv_annee; ?>">
                                    (<?php echo $sauv_annee; ?>)
                                </a>
                            </li>
                    <?php
                        } else { // sinon, si c'est la première année,
on l'affiche aussi en current
                            if ($cpt_annee == '1' && $_GET['year'] == '') {
                    ?>
                                <li class="current">
                                    <a href="#URL_RUBRIQUE&year=<?php
echo $sauv_annee; ?>">
                                        (<?php echo $sauv_annee; ?>)
                                    </a>
                                </li>
                    <?php } else { // sinon, l'année est simplement
affichée ?>
                                <li>
                                    <a href="#URL_RUBRIQUE&year=<?php
echo $sauv_annee; ?>" >
                                        (<?php echo $sauv_annee; ?>)
                                    </a>
                                </li>
                    <?php
                            }
                        }
                    ?>
                        [(#COMPTEUR_BOUCLE|!={#TOTAL_BOUCLE}|?{'-',''})]
                    <?php
                    }
                    ?>
                </BOUCLE_presse_annees>
                </ul>
                </B_presse_annees>

                <B_presse_mois>
                <ul class="mois">
                <?php
                    // compteurs pour sélectionner le premier mois par
défaut si aucun n'est passé en param
                    $cpt_mois = 0;
                    $cpt_year_month = 0;
                ?>
                <BOUCLE_presse_mois(ARTICLES){id_rubrique}{lang}{par date}>
                    <?php
                    $sauv_mois_court = '[(#DATE|nom_mois|unique|couper{1})]';
                    $sauv_mois_complet = '[(#DATE|nom_mois)]';

                    // si le mois n'est pas vide (critère "unique")
                    if ($sauv_mois_court != '') {

                        // ************************************
                        // * Si il y a une année en paramètre *
                        // ************************************
                        if ($_GET['year'] != '') {

                            // si l'année en paramètre correspond à
l'année de l'article
                            if ('[(#DATE|annee)]' == $_GET['year']) {
                                $cpt_mois += 1;
                                // sauvegarde premier mois
                                if ($cpt_mois == '1') {
                                    $first_month = $sauv_mois_complet;
                                }
                                // si le mois en paramètre == le mois
de l'article, on affiche celui-ci une seule fois en current
                                if ($sauv_mois_complet == $_GET['mois']) {
                    ?>
                                    <li class="current">
                                        <a
href="#URL_RUBRIQUE&year=<?php echo $_GET['year']; ?>&mois=<?php echo
$sauv_mois_complet; ?>"
                                            style="text-transform:uppercase;">
                                            <?php echo $sauv_mois_court; ?>
                                        </a>
                                    </li>
                    <?php
                                // sinon, si c'est le premier mois, on
l'affiche aussi en current
                                } else if ($cpt_mois == '1' &&
$_GET['mois'] == '') {?>
                                    <li class="current">
                                        <a
href="#URL_RUBRIQUE&year=<?php echo $_GET['year']; ?>&mois=<?php echo
$sauv_mois_complet; ?>"
                                            style="text-transform:uppercase;">
                                            <?php echo $sauv_mois_court; ?>
                                        </a>
                                    </li>
                    <?php } else { ?>
                                    <li>
                                        <a
href="#URL_RUBRIQUE&year=<?php echo $_GET['year']; ?>&mois=<?php echo
$sauv_mois_complet; ?>"
                                            style="text-transform:uppercase;">
                                            <?php echo $sauv_mois_court; ?>
                                        </a>
                                    </li>
                    <?php }
                            }
                        }
                        // ************************************
                        // * Sinon, si l'année == la première *
                        // ************************************
                        else if ('[(#DATE|annee)]' == $first_year) {
                            $cpt_year_month += 1;
                            if ($sauv_mois_complet == $_GET['mois']) {
                    ?>
                                <li class="current">
                                    <a href="#URL_RUBRIQUE&year=<?php
echo $first_year; ?>&mois=<?php echo $sauv_mois_complet; ?>"
                                        style="text-transform:uppercase;">
                                        <?php echo $sauv_mois_court; ?>
                                    </a>
                                </li>
                    <?php } else if ($cpt_year_month == '1' ||
$cpt_mois == '1') { ?>
                                <li class="current">
                                    <a href="#URL_RUBRIQUE&year=<?php
echo $first_year; ?>&mois=<?php echo $sauv_mois_complet; ?>"
                                        style="text-transform:uppercase;">
                                        <?php echo $sauv_mois_court; ?>
                                    </a>
                                </li>
                    <?php } else { ?>
                                <li>
                                    <a href="#URL_RUBRIQUE&year=<?php
echo $first_year; ?>&mois=<?php echo $sauv_mois_complet; ?>"
                                        style="text-transform:uppercase;">
                                        <?php echo $sauv_mois_court; ?>
                                    </a>
                                </li>
                    <?php }
                        }
                    }
                    ?>
                </BOUCLE_presse_mois>
                </ul>
                </B_presse_mois>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Sujet clos pour ma part, même si je regrette que ça ne fonctionne pas
de manière plus simple...

Gratz