Carnet Wiki

Version 3 — Juillet 2017 erational

Objectifs

Retourner un article par jour sans problème de cache

Solution

  • placer sur la page #CACHE{3600}
  • utliser le filtre suivant [(#REM|retourne_id_article_mot_jour)]

merci à marcimat pour l’idée de l’algorithme

  1. <?php
  2.  
  3.  
  4. if (!defined('_ECRIRE_INC_VERSION')) {
  5.         return;
  6. }
  7.  
  8.  
  9. /**
  10.  * filtre retourner un id_article different par jour
  11.  * utilise avec [(#REM|retourne_id_article_mot_jour)]
  12.  *
  13.  * @return int id_article
  14.  */
  15. function retourne_id_article_mot_jour() {
  16.         include_spip('inc/config');
  17.  
  18.  
  19. $id_article_mot_jour = ;
  20.         $today = date('z');
  21.  
  22.  
  23. // lire le tableau
  24.         $jours_connus = lire_config('mot_jour/jours_connus');
  25.         // spip_log($jours_connus,"mot_jour");
  26.  
  27.  
  28. // si jour deja connu, on le sort
  29.         if (is_array($jours_connus)) {
  30.                 if (isset($jours_connus[$today])) {
  31.                         return $jours_connus[$today];
  32.                 }
  33.         }
  34.  
  35.  
  36. // sinon, on recupere un nouvel article de selection, ici les articles de la rubrique 39 et 125
  37.         $where = array();
  38.         $where[] = "statut = 'publie'";
  39.         $where[] = "id_rubrique IN (39,125)";
  40.     if (is_array($jours_connus)) {
  41.                         if (count($jours_connus)) {
  42.                                 $where[] = "id_article NOT IN (".implode(",",$jours_connus).")";
  43.                         }
  44.         }
  45.         $id_article_mot_jour = sql_getfetsel('id_article', 'spip_articles', $where, '', 'RAND()', '0,1');
  46.  
  47.  
  48. // on sauve le nouveau mot
  49.         $jours_connus[$today] = $id_article_mot_jour;
  50.  
  51.  
  52. // on depile un jour
  53.         if (z@@@SPIP_DIFF2@@@ >=@@@SPIP_DIFF1@@@ @@@SPIP_DIFF4@@@ >@@@SPIP_DIFF1@@@  182) {
  54.                 unset($jours_connus[z-182]);
  55.         } else {
  56.                 unset($jours_connus[365 - z]);
  57.         }
  58.  
  59.  
  60. // on sauve le tout
  61.         ecrire_config('mot_jour/jours_connus', $jours_connus@@@SPIP_DIFF4@@@);
  62.         @@@SPIP_DIFF1@@@ @@@SPIP_DIFF4@@@ecrire_config('mot_jours ', @@@SPIP_DIFF1@@@ @@@SPIP_DIFF4@@@$id_article_mot_jour@@@SPIP_DIFF1@@@ );
  63.  
  64.  
  65. return $id_article_mot_jour;
  66. }

Télécharger