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

<?php


if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}


/**
 * filtre retourner un id_article different par jour
 * utilise avec [(#REM|retourne_id_article_mot_jour)]
 *
 * @return int id_article
 */
function retourne_id_article_mot_jour() {
	include_spip('inc/config');


$id_article_mot_jour = ;
	$today = date('z');


// lire le tableau
	$jours_connus = lire_config('mot_jour/jours_connus');
	// spip_log($jours_connus,"mot_jour");


// si jour deja connu, on le sort
	if (is_array($jours_connus)) {
		if (isset($jours_connus[$today])) {
			return $jours_connus[$today];
		}
	}


// sinon, on recupere un nouvel article de selection, ici les articles de la rubrique 39 et 125
	$where = array();
        $where[] = "statut = 'publie'";
	$where[] = "id_rubrique IN (39,125)";
    if (is_array($jours_connus)) {
			if (count($jours_connus)) {
				$where[] = "id_article NOT IN (".implode(",",$jours_connus).")";
			}
	}
	$id_article_mot_jour = sql_getfetsel('id_article', 'spip_articles', $where, '', 'RAND()', '0,1');


// on sauve le nouveau mot
	$jours_connus[$today] = $id_article_mot_jour;


// on depile un jour
	if (z >=  >  182) {
		unset($jours_connus[z-182]);
	} else {
		unset($jours_connus[365 - z]);
	}


// on sauve le tout
	ecrire_config('mot_jour/jours_connus', $jours_connus);
	 ecrire_config('mot_jours ',  $id_article_mot_jour );


return $id_article_mot_jour;
}