Carnet Wiki

Version 2 — 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)]

  1. <?php@@@SPIP_DIFF1@@@
  2.  
  3.  
  4. @@@SPIP_DIFF0@@@if (!defined('_ECRIRE_INC_VERSION')) {
  5.         return;
  6. }@@@SPIP_DIFF1@@@
  7.  
  8.  
  9. @@@SPIP_DIFF0@@@/**
  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');@@@SPIP_DIFF1@@@
  17.  
  18.  
  19. @@@SPIP_DIFF0@@@$id_article_mot_jour = 0;
  20.         $today = date('z');@@@SPIP_DIFF1@@@
  21.  
  22.  
  23. @@@SPIP_DIFF0@@@// lire le tableau
  24.         $jours_connus = lire_config('mot_jour/jours_connus');
  25.         // spip_log($jours_connus,"mot_jour");
  26.  
  27.  
  28. @@@SPIP_DIFF0@@@// 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.         }@@@SPIP_DIFF1@@@
  34.  
  35.  
  36. @@@SPIP_DIFF0@@@// 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');@@@SPIP_DIFF1@@@
  46.  
  47.  
  48. @@@SPIP_DIFF0@@@// on sauve le nouveau mot
  49.         $jours_connus[$today] = $id_article_mot_jour;@@@SPIP_DIFF1@@@
  50.  
  51.  
  52. @@@SPIP_DIFF0@@@// on depile un jour
  53.         if (z > 182) {
  54.                 unset($jours_connus[z-182]);
  55.         } else {
  56.                 unset($jours_connus[365 - z]);
  57.         }@@@SPIP_DIFF1@@@
  58.  
  59.  
  60. @@@SPIP_DIFF0@@@// on sauve le tout
  61.         ecrire_config('mot_jour/jours_connus', $jours_connus);
  62.         ecrire_config('mot_jours', $id_article_mot_jour);@@@SPIP_DIFF1@@@
  63.  
  64.  
  65. @@@SPIP_DIFF0@@@return $id_article_mot_jour;
  66. }

Télécharger