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
.
Un plugin pour aller plus loin
Si cette fonctionnalité vous intéresse, voyez le plugin Tri par rubrique : il permet de choisir quel mode de tri est employé par défaut pour les articles, rubrique par rubrique (par date, par titre, inverse, etc.)