Andere skeletten insluiten met <INCLURE>

Wanneer je bepaalde tekstelementen hebt of lussen die in meerdere skeletten kunnen worden toegepast, kun je deze scheiden van het skelet en in een apart bestand plaatsen. Dan kun je ze in meerdere skeletten oproepen en gebruiken.

Enkele typische voorbeelden van het gebruik van deze functionaliteit zijn:
— de declaratie van de HTML headers (met het aanroepen van JavaScript, stylesheets, enz.),
— gemeenschappelijke navigatie-elementen,
— de top banner van iedere pagina (met het logo, de slogan, de zoekfunctie, enz.),
— de footer van iedere pagina...

De syntax

Ben je bekend met PHP, dan ken je de functie include, waarvan het principe gelijk is aan wat we hier tonen.

Je kunt een skelet aanroepen als onderdeel van een ander skelet met het baken <INCLURE> (je mag ook <INCLUDE> gebruiken, een alias). De algemene syntax is:

<INCLURE{fond=bestand, parameters ...}>

Het «bestand» is de naam van het bestand wat je wilt opnemen in het skelet. Als we bijvoorbeeld aannemen dat onderaan iedere pagina van je site dezelfde inhoud staat, dan kunnen we die SPIP en HTML code opslaan in een bestand «pied.html». Dit gebeurt feitelijk in de standaardskeletten van SPIP. De naam van het bestand kun je natuurlijk zelf kiezen, maar ze is afgeleid van het Franse «pied de page». In ieder skelet van een pagina zetten we onderaan:

<INCLURE{fond=pied}>

En wanneer je ervoor kiest om dit soort skeletten in de submap inc van je map met skeletten te plaatsen, wordt dit:

<INCLURE{fond=inc/pied}>

Insluiting afhankelijk van de context

Bepaalde insluitingen zijn afhankelijk van de context. Hebben we bijvoorbeeld een skelet «hierarchie», dat het huidige pad (de «breadcrump» weergeeft van de root naar de huidige rubriek, dan zouden we dat via een URL moeten oproepen met: «spip.php?page=hierarchie&id_rubrique=xxx».

Willen we ditzelfde binnen een skelet doen, dan moeten we die parameter met de huidige rubriek doorgeven aan het opgeroepen skelet. We doen dat met de parameter {id_rubrique}; die we desnoods zullen moeten vastleggen door het oproepen van het skelet binnen een lus te plaatsen:

<INCLURE{fond=hierarchie, id_rubrique}>

Je kunt je in sommige gevallen voorstellen dat we niet de huidige rubriek willen gebruiken, maar een specifiek bepaalde rubriek. In dat geval kun je de parameter een vaste waarde geven:

<INCLURE{fond=hierarchie, id_rubrique=5}>

N.B. Je kunt zo meerdere parameters aan het baken <INCLURE> toevoegen. Voeg geen onnodige parameters toe, want het zou een negatief effect hebben op de cache en je site vertragen.

N.B. Omdat het opgeroepen bestand ook een skelet is, heeft het zijn eigen waarde voor het baken #CACHE [1].

In een meertalige context

Wanneer je de meertaligheid van SPIP hebt geactiveerd, kun je de taal van een ingesloten skelet aansturen met de parameter {lang}.

-  wordt geen taalparameter doorgegeven, dus in de vorm <INCLURE{fond=pied}>, dan zal het aangeroepen skelet de standaardtaal van de site gebruiken;

-  <INCLURE{fond=pied, lang=es}> roept het selet aan in het Spaans. En natuurlijk kun je «es» vervangen door een andere ISO taalcodede (zie: «Internationaliser les squelettes»);

-  <INCLURE{fond=pied, lang}> roep het skelet aan in de taal die in de huidige context wordt gebruikt.

Op deze manier kun je een meertalig skelet toepassen en in dit opgeroepen skelet gebruik maken van taalstrings (zie: «Internationaliser les squelettes»).

Ingesloten skeletten ondersteunen hetzelfde selectiemechanisme voor de taal als de skeletten van het «eerste niveau». Met andere woorden, een ingesloten skelet (hier pied.html) kan voor een bepaalde taal worden gedefinieerd (bijvoorbeeld pied.es.html) net als alle ander skeletten. En dit alles lees je, zoals eerder vermeld, in het artikel «Internationaliser les squelettes».

#INCLURE statisch

SPIP heeft ook een baken voor insluitingen: #INCLURE.

De syntax <INCLURE{fond=..}> forceert het insluiten van pagina’s bij elk bezoek, ongeacht of die pagina al in de cache staat.

Met dit baken [(#INCLURE{fond=...})] wordt de insluiting uitgevoerd tijdens de berekening van de pagina en het resultaat wordt in de cache geplaatst van de oproepende pagina. Bij deze methode kan dus voor het opgeroepen skelet geen aparte levensduur voor de cache worden gebruikt. Aan de andere kant is het wel mogelijk om filters op het ingesloten skelet toe te passen: [(#INCLURE{fond=xyz}|version_texte)].

<INCLURE{fond=..}> en [(#INCLURE{fond=..})] hebben dus verschillende werkwijzen:
— met <INCLURE{fond=..}> heeft ieder skelet een eigen versie in de cache;
— met [(#INCLURE{fond=..})] gaat het gehele resultaat in de cache, dus de opgeroepen skeletten hebben geen eigen versie in de cache.

<INCLURE> en {doublons}

De voorwaarde {doublons} kan op een lus worden toegepast. Maar gebruik je een <INCLURE> In je skelet, dan zullen dubbele elementen niet bekend zijn in het ingesloten skelet.

Toch kun je dit probleem omzeilen. Voeg daarvoor de parameter {doublons}> toe bij het aanroepen van het skelet, bijvoorbeeld: <INCLURE{fond=mijnpagina, doublons}>.

Maar omgekeerd zullen de dubbele elementen uit het opgeroepen skelet niet worden teruggegeven aan het oproepende skelet.

<INCLURE> en ajax

De ajax technologie maakt he mogelijk om op een link te klikken en slechts een deel van de pagina te verversen. Voor meer details lees je ajax voor insluitingen (inclure).

Voetnoot

[1Deze opgeroepen skeletten hoeven mogelijk minder vaak te worden ververst.

Auteur Hanjo Gepubliceerd op: Aangepast: 21/03/23

Vertalingen: عربي, català, English, Español, français, italiano, Nederlands, Türkçe