Het is mogelijk om de output van lussen te sorteren aan de hand van de voorwaarde
{par}
. Het skelet voor de documentatie die je momenteel leest, heeft dezelfde sorteervoorwaarde
{par num titre, titre}
voor alle
ARTICLES
en
RUBRIQUES
lussen.
In plaats van dit te herhalen in de code voor alle lussen, kunnen we het slechts één keer toepassen voor alle lussen als er geen andere sorteercriteria zijn gespecificeerd voor een bepaalde lus. Om dit te doen, gebruiken we de
pre_boucle
pipeline en voegen we een
ORDER BY
in voor de SQL select queries.
{{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;
}
Dit houdt in dat de lussen standaard worden gesorteerd:
// automatisch sorteren {par num titre, titre} :
<BOUCLE_a1(ARTICLES){id_rubrique}>...
// afwijkend sorteren:
<BOUCLE_a2(ARTICLES){id_rubrique}{!par date}>...
{{{Enkele details}}}
De pipeline ontvangt een "boucle" (lus) type PHP objectdatdiverse waardes kan hebben. De lus heeft met name enkele
select
en
order
variabelen die bepalen wat wordt aangegeven in de
SELECT
en
ORDER BY
voorwaardes van de aangemaakte SQL query. De SQL tabelnaam (
spip_articles
of
spip_rubriques
in het huidige geval) wordt opgeslagen in
$boucle->id_table
.
Wanneer we een nummer toekennen binnen de titels van SPIP artikelen (die geen
ranking
veld in hun tabellen hebben, ook al is de code al voorzien om ermee te werken!), schrijven we dit als volgt: "10. Titel" (getal-punt-spatie-Titel). Om SQL gemakkelijk op nummer te laten sorteren, is het enige wat nodig is om een numerieke evaluatie van het veld af te dwingen (die vervolgens wordt omgezet in een getal). Daarom kan de code "0+titre AS autonum", die een aliaskolom met de naam
autonum
met daarin deze numerieke rekenwaarde, als sorteerkolom gebruikt worden in de
ORDER BY
clausule.