Appliquer un tri par défaut sur les boucles

Il est possible de trier le résultat des boucles avec le critère {par}. Ce squelette de documentation utilise pour toutes ses boucles ARTICLES et RUBRIQUES un tri {par num titre, titre}.

Plutôt que de le répéter pour toutes les boucles, appliquons-le une fois pour toute si aucun tri n’est déjà demandé. Pour cela, on utilise le pipeline pre_boucle et on ajoute dessus une sélection SQL ORDER BY :

Plugin.xml :

<pipeline>
	<nom>pre_boucle</nom>
	<inclure>documentation_pipelines.php</inclure>
</pipeline>

documentation_pipelines.php :

function documentation_pre_boucle($boucle){
	// ARTICLES, RUBRIQUES : {par num titre, titre}
	if (in_array($boucle->type_requete, array('rubriques','articles'))
	AND !$boucle->order) {
		$boucle->select[] = "0+" . $boucle->id_table . ".titre AS autonum";
		$boucle->order[]  = "'autonum'";
		$boucle->order[]  = "'" . $boucle->id_table . ".titre'";
	}
	return $boucle;
}

De cette manière, les boucles sont triées par défaut :

// tri auto {par num titre, titre} :
<BOUCLE_a1(ARTICLES){id_rubrique}>...
// tri différent :
<BOUCLE_a2(ARTICLES){id_rubrique}{!par date}>...

Quelques détails

Le pipeline reçoit un objet PHP de type « boucle » qui peut recevoir différentes valeurs. La boucle possède notamment des variables select et order qui gèrent ce qui va être mis dans la clause SELECT et ORDER BY de la requête SQL générée. Le nom de la table SQL (spip_articles ou spip_rubriques dans ce cas là) est stocké dans $boucle->id_table.

Lorsqu’on met un numéro sur les titres des articles de SPIP (qui n’a pas encore de champ rang dans ses tables alors que le code est déjà prévu pour le gérer !), on l’écrit comme cela : « 10. Titre » (numéro point espace Titre). Pour que SQL puisse trier facilement par numéro, il suffit de forcer un calcul numérique sur le champ (qui est alors converti en nombre). C’est à ça que sert le « 0+titre AS autonum » qui crée un alias autonum avec ce calcul numérique qu’il est alors possible d’utiliser comme colonne de tri dans le ORDER BY.

Auteur Matthieu Marcillaud Publié le : Mis à jour : 12/03/23

Traductions : English, français