Carnet Documentation SPIP

Filtre mot du jour - Retourne un article aléatoirement chaque jour

SPIP-Contrib :: Carnet Wiki :: Carnet Documentation SPIP :: Recherche :

Filtre mot du jour - Retourne un article aléatoirement chaque jour

Objectifs

Retourner un article différent par jour sans problème de cache

Solution

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

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

Télécharger