Lussen een standaard sorteervolgorde toewijzen

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.

Auteur hanjo Gepubliceerd op:

Vertalingen: English, français, Nederlands