Sélectionner les éléments par leur jour de publication

Voici un nouveau critère pour limiter une boucle à des éléments publiés seulement un certain jour de la semaine.

Cette fonction, placée dans votre fichier mes_fonctions ajoute à un nouveau critère utilisable dans n’importe quelle boucle ayant une date. Le nouveau critère joursemaine prend un paramètre numérique, entre 0 et 6 qui indique le jour de la semaine à sélectionner (0=Dimanche, 6=Samedi).

Par exemple, pour avoir tous les articles publiés un Lundi pluvieux, on utilisera une boucle:

<BOUCLE_lundi(ARTICLES) {joursemaine 1}>
#TITRE
</BOUCLE_lundi>

Le code

function critere_joursemaine($idb, &$boucles, $crit) {
		 global $table_date;	   		
		 $boucle = &$boucles[$idb];	
		 $date = $table_date[$boucle->type_requete];	
		 $date = $boucle->id_table . ".$date";
		 if(!$crit->param[0]) {$jour = "'0'";}
		 else
				$jour = calculer_liste($crit->param[0], array(), $boucles, $boucle->id_parent);
		 $boucle->where[] =  "DATE_FORMAT($date, '%w') ".(($crit->not)?'!=':'=')." \".(($jour != '')?$jour:'0').\"";
}

Quelques explications

  1. il faut trouver la boucle avant de lui ajouter une limitation (where):
    $boucle = &$boucles[$idb];
    ($boucles étant le tableau de toutes les boucles de la page et à $idb
    le nom de la boucle actuelle)
  2. il faut aussi trouver la bonne colonne de date, en fonction du type de la
    boucle, il y a donc:
    $table_date[$boucle->type_requete];
    qui retourne la colonne de date pour ce type de boucle.
  3. ensuite, on doit aussi dire à quelle table on fait référence:
    $date = $boucle->id_table . ".$date";
  4. On calcule la valeur du paramètre:
    if(!$crit->param[0]) {
       $jour = 0;
    } else
       $jour = calculer_liste($crit->param[0], array(), $boucles, $boucle->id_parent);
    • Si y’en a pas, c’est qu’on a passé 0 (dimanche)
    • sinon, on “calcule” le critère, ainsi on peut passer une balise en paramètre si on veut.
  5. on construit le where et on prend en compte le “not” pour
    inverser le critère au cas ou.
  6. il se peut que, si l’on passe une balise en paramètre, la valeur retourné soit vide. On ne peut pas savoir cela avant d’avoir calculé cette balise, il faut donc faire le test:
    (($jour != '')?$jour:'0') qui sera évalué au dernier moment, quand on connait la valeur de la balise.

Un exemple d’utilisation

On peut voir un exemple d’utilisation sur cette page du bloc note du desordre qui construit une semaine composite prise au hasard à partir de 7 boucles du genre

(ARTICLES){0,1}{par hasard}{joursemaine X}

NB : des utilisations moins tordues sont surement possibles

Discussion

One discussion

  • 1

    Bonjour, c’est intéressant.
    Mais avec quelle version de Spip est ce compatible ?

    Merci a vous
    dany

    • le principe est applicable à partir de la 1.8, le code donné là est pour la 1.8.2d et je pense qu’il faut quelques modification pour des versions plus vieilles de la 1.8.

    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