Les articles d’un mois

All contributions published for previous SPIP versions

Comment publier sur une seule page les articles du mois de ...

Sur un site j’ai voulu faire une sorte de journal mensuel que je puisse imprimer. Et je suis arrivé devant le problème : « comment dans SPIP sélectionner seulement ces articles ? »

Après plusieurs essais en SPIP pur... « Allez, réflechis, cela doit être possible en Spip pur », j’ai mis un peu de PHP, et hop voilà qui est fait.

Quelques explications pour ceux que cela intéresse :

$id_annee=intval($GLOBALS['id_annee']);
$id_mois=intval($GLOBALS['id_mois']);

Récuperation du mois et de l’année passé en paramètre dans l’url... et transformés en int pour être sûr que c’est bien un entier et pas un code malicieux ;-)

<BOUCLE_principale(ARTICLES){par date}>
<?php 
$annee_article='[(#DATE|annee)]';
$mois_article='[(#DATE|mois)]';

if ($annee_article==$id_annee and $mois_article==$id_mois ) {
?>

Je fais une boucle sur tout le site puis je regarde la date de l’article et je la compare à celle passée en paramètre.

Remarques :
-  c’est ici que vous pouvez retreindre et prendre par exemple uniquement les articles de la rubrique XX ;
-  J’ai choisi la balise #DATE de Spip, mais sachez q’il y a aussi #DATE_REDAC, #DATE_MODIF .

<?php } ?>
</BOUCLE_principale>

Et n’oublions surtout pas en fin de boucle principale de fermer le test

A noter aussi que le délai dans mois.php3 est important : pas la peine de recalculer cette page souvent.

il vous suffit maintenant d’appeler : mois.php3?id_mois=01&id_annee=2003 par exemple.

Attention : si vous utilisez la balise

#NOTES

, il ne faut afficher les notes qu’une seule fois pour l’ensemble des articles (ce bug est corrigé dans la future version 1.6 de SPIP).

Discussion

10 discussions

  • 1

    Salut Ben,

    Ce serait intéressant de mettre cette contrib à jour pour la 1.8 en utilisant la récupération de paramètres d’url dans les boucles, histoire de se débarasser de php.

    • Pour afficher les articles d’un mois quelconque je passe la valeur offset dans l’url. Le scripte l’utilise pour définir un mois relatif au mois courant.

      <BOUCLE_mois(ARTICLES){mois_relatif=#ENV{offset}}{par date}>
          [<hr /><h2>(#DATE|annee|unique)</h2>]
              [<h3>(#DATE|affdate{'Y-m'}|unique|nom_mois)</h3>]
                   [(#DATE|nom_jour),] [(#DATE|jour).][(#REDAC|mois).][(#DATE|annee)] - <a href='#URL_ARTICLE'>#TITRE</a><br />
      
      </BOUCLE_mois>
      <br />pas de résultat
      <//B_mois>
      _ &nbsp;
      _ &nbsp;

      Cet exemple de code est la version simplifiée d’un scripte qui affiche une sorte d’agenda basée sur #DATE_REDAC

    Reply to this message

  • Il est possible a partir de la version 1.6 faire cela en SPIP pur à l’intérieur d’un squelette.

    Voici la boucle :
    <BOUCLE_principale(ARTICLES){par date}{mois_relatif=0}>

    Et il suffit que cette boucle possède la date dans le contexte ou dans l’url ( ... par exemple nomDuFichier.php3 ?date=2004/04 )

    Voir la documentation sur la gestion des dates

    Reply to this message

  • Je ne comprends pas commment une page html peut avoir du code php...

    J’ai un message d’erreur systématique “Fatal error: Maximum execution time exceeded in your script on line 67” (ou d’autres ligne). Etant sous online, j’imagine que ça signifie que la requête est trop longue...

    Enfin... on aura essayé !

    Reply to this message

  • Pas vraiment besoin de php pour afficher les articles d’un mois en SPIP. Il faut tester par année et mois relatifs. Le modèle et le code sont téléchargeables gratuitement sur le site mentionné ci-dessous.

    Reply to this message

  • Désolé, mais tu ne réponds pas avec la question en terme “simplifiés” avec une démarche méthodique pour les neophytes.
    J’ai un blog et je cherche à faire des archives, genre (articles du 07/2003, du 08/2003...etc)
    Maintenant, je crois que c’est que ce que tu me propose de faire, encore faut il comprendre ta démarche...
    Par exemple,les lignes: $id_annee=intval($GLOBALS[’id_annee’]);
    $id_mois=intval($GLOBALS[’id_mois’]);,
    ou les met on?

    Merci d’etre plus simple dans la démarche à suivre...

    Reply to this message

  • C’est bien dommage... Il faut laisser SPIP récupérer un maximum d’enregistrements de la base (et fabriquer en conséquence un fichier PHP monstrueux), juste pour ensuite en sélectionner seulement certains... Bonjour les performances... :-/
    Mais effectivement, je n’ai pas trouvé pour le moment d’autre solution pour faire des sélections à partir de variables passées dans l’URL qui ne soient pas les classiques id_xx.
    N’existe-t-il donc pas une meilleure solution...

    Reply to this message

  • Toulcaz

    Merci pour ce superbe article, bien pratique.
    Je suis en train de développer un weblog sous spip.
    Je veux mettre en place un petit calendrier permettant de retrouver les articles en cliquant sur une date. Ca marche désormais avec une précision journalière.
    Il me reste maintenant à faire en sorte que les dates s’affichent en gras quand il y a des articles et à rajouter une fonction mois précédent.
    Néanmoins, cet article m’a permis d’aller plus vite. Grâce à lui et SPIP, j’aurais réussi à développer ce blog en 2 jours.

    Reply to this message

  • victorio

    Pour ma par j’ai pris une autre solution.
    Je sais pas ce que cela va donnée encore car je développe encore les pages, mais pour le moment ça colle a ce que je veux.
    J’ai donc deux sites qui marche en numéro pour cela j?ai créé un groupe de mots nommé “numéro”, ensuite j?ai créé des mots nommé “#1” “#2” etc...

    Le premier publie les articles au fil du temps. Mais quand on passe au numéros suivant on peu imprimer les numéros précédents.
    Dans le second la date de parution de tous les articles du numéro est la même. Et tout les articles appartiennent a un seul numéro. Je n?ai pour le moment pas trouver comment assigner automatiquement la date en fonction du numéro choisi mais faut dire aussi que je ne me suis pas posé la question. Pour l?instant cela donne de bon résultats sans une seul ligne de code php, non pas que j?en sois pas capable mais je préfère rester dans la logique SPIP standars . Mais comme mes sites son pas fini encore vous pourrez pas voir grand choses.

    Reply to this message

  • Sébastien

    J’ai trouvé par hasard un autre moyen d’afficher les articles (ou les brèves) d’un mois et cela sans rajouter de php. C’est assez dégueulasse mais ça marche :

    <BOUCLE_archives(BREVES){id_rubrique}{annee=2003}{mois=$id_mot}{par date}{inverse}>#TITRE<br /></BOUCLE_archives>

    Il suffit ensuite d’appeler la page en rajoutant à la fin de l’url : id_mot=2 pour février par exemple.

    Vous pouvez voir un exemple là : http://www.essentielpc.com/s/rubrique.php3?id_rubrique=2&id_mot=3

    En fait, on détourne la variable $id_mot pour s’en servir de paramètre. Je pense que l’on peut faire la même chose avec une autre variable pour l’année. C’est pas très propre, je ne suis pas sûr qu’au niveau sécurité ce soit le top, mais ça permet d’éviter au serveur de faire plein de comparaisons inutiles sur les dates (en effet, dans l’exemple précédent, c’est le code php qui est mis en cache et qui est donc exécuté à chaque fois que l’on appelle la page).

    Voilà, je me disais que ça pourrait peut-être servir à quelqu’un.

    Reply to this message

  • D’abord, merci pour le code, ça marche super bien !
    Mais j’ai une question et je ne trouve pas de réponse :

    Une fois affichés les articles d’une certaine date, je voudrais avoir la liste des autres rubriques, mais uniquement les rubriques contenant des articles pour cette date.
    Et je ne parviens pas à réutiliser les variables php ou les id_mois ou id_annee dans une boucle (RUBRIQUES).

    Reply to this message

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite / PostgreSQL
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparait.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom