{doublons}

De voorwaarde {doublons} voorkomt het voor een tweede keer weergeven (in een andere lus) van dezelfde resultaten.

  • Apparu en : SPIP 1.2

Wanneer je de voorwaarde {doublons} eenmaal hebt ontdekt, zal je hem vaak in je skeletten gebruiken. De voorwaarde opent interessante mogelijkheden, vooral door enkele latere toevoegingen:
-  je kunt {doublons} benoemen en er dus meerdere in hetzelfde skelet gebruiken,
-  en je kunt ook anti-{doublons} uitvoeren!

Basistoepassing: een element slechts eenmaal op een pagina tonen

In het standaardskelet sommaire.html vind je een voorbeeld:

<BOUCLE_recente_artikelen(ARTICLES) {par date}{inverse} {0,2} {doublons}>
weer te geven elementen, bijvoorbeeld  #TITRE
</BOUCLE_recente_artikelen>
<BOUCLE_overige_artikelen(ARTICLES) {par date}{inverse} {doublons} >
weer te geven elementen, bijvoorbeeld #TITRE
</BOUCLE_overige_artikelen>

We laten dus de twee nieuwste artikelen in omgekeerde datumvolgorde zien EN zorgen ervoor dat ze niet tweemaal worden weergegeven. Zoals je ziet, zijn de lussen "_recente_artikelen" en "_overige_artikelen" op identieke wijze opgebouwd en zouden (zonder de toevoeging {doublons}) dus ook dezelfde lijst van artikelen weergeven.

Dankzij de werking van {doublons} zullen de twee artikelen waartoe de eerste lus beperkt is ({0,2}), niet nogmaals worden weergegeven in de lus "_overige_artikelen" (die dezelfde {doublons} bevat).

Andere toepassing: elementen uitsluiten

Uitsluiten volgens een trefwoord

Vaak rapporteren gebruikers op spip-users een probleem van het type:

"Het lukt mij niet om elementen uit te sluiten op basis van hun trefwoord. Ik probeerde:

<BOUCLE_rubrieken(RUBRIQUES) {racine} {titre_mot!=verborgen}{par num titre, titre}>

maar dit werkt niet!"

Wat deze gebruiker wil, is alle rubrieken weergeven die niet het trefwoord "verborgen" hebben. Maar wat ze met de code {titre_mot != verborgen} aangeven, betekent: selecteer alle rubrieken MET een trefwoord EN dit trefwoord mag niet "invisible" zijn.

De oplossing: maak een lege lus die selecteert op dit trefwoord en een tweede lus die alle rubrieken selecteert, maar die van de eerste lus uitsluit met voorwaarde {doublons}.

Het bovenstaande probleem wordt dus opgelost met een eerste lus:

<BOUCLE_uitsluiten(RUBRIQUES) {racine} {titre_mot=verborgen}{doublons}>
</BOUCLE_uitsluiten>

Deze lus selecteert alle rubrieken met het trefwoord "verborgen" , maar geeft niets weer.

<BOUCLE_rubrieken(RUBRIQUES) {racine}{par num titre, titre} {doublons}>
{hier de weergave}
</BOUCLE_rubrieken>

Dankzij de voorwaarde {doublons} selecteert deze tweede lus alle andere rubrieken en voert vervolgens de gewenste handelingen uit.

Een {doublons} benoemen

Objectief: op een beginpagina willen we artikelen en beschouwingen van elkaar scheiden. Van beide willen we onder een aparte kop de nieuwste twee laten zien en vervolgens alle andere. Een beschouwing wordt gekenmerkt door een trefwoord met {id_mot=1}:

<BOUCLE_recente_beschouwingen(ARTICLES) {!par date}{id_mot=1} {0,2} {doublons bes}>
weer te geven elementen, bijvoorbeeld  #TITRE
</BOUCLE_recente_beschouwingen>
<BOUCLE_overige_beschouwingen(ARTICLES) {!par date}{id_mot=1} {doublons bes} >
weer te geven elementen, bijvoorbeeld  #TITRE
</BOUCLE_overige_beschouwingen>

<BOUCLE_recente_artikelen(ARTICLES) {!par date} {0,2} {doublons art}>
weer te geven elementen, bijvoorbeeld  #TITRE
</BOUCLE_recente_artikelen>
<BOUCLE_overige_artikelen(ARTICLES) {!par date} {doublons art} >
weer te geven elementen, bijvoorbeeld  #TITRE
</BOUCLE_overige_artikelen>

En niets houd je tegen om een {doublons} te benoemen met behulp van een baken van SPIP, zoals: {doublons #TITRE} of {doublons #_mijnlus:TITRE} of zelfs {doublons (#_mijnlus:TITRE|supprimer_numero)}.

Geavanceerde toepassing: anti-doublons

Mechanisme van anti-doublons

Hier gaat {doublons} het mogelijk maken de resultaten uit meerdere lussen met verschillende criteria te verzamelen en vervolgens met {!doublons} de gewenste verwerkingen doen met de verzamelde gegevens.

Dit zijn de te volgen stappen:

We selecteren een eerste reeks artikelen (maar geven niets weer)...

<BOUCLE0(ARTICLES){id_mot=2}{doublons A}></BOUCLE0>

We selecteren een tweede reeks artikelen (maar geven niets weer)...

<BOUCLE1(ARTICLES){id_auteur=1}{doublons A}></BOUCLE1>

En we geven beide weer dankzij de anti-doublons:

<BOUCLE2(ARTICLES){par date}{!doublons A}>#TITRE<br></BOUCLE2>

Een anti-doublons voorbeeld

Objectief: een lus maken die de artikelen uit alle rubrieken selecteert, behalve van rubrieken 2 en 3, EN van rubriek 4 alleen artikelen die jonger zijn dan 60 dagen.

De oplossing: we beginnen met een lus die de artikelen selecteert uit alle rubrieken, behalve de rubrieken 2 en 3, maar ook 4...

<BOUCLE0(ARTICLES) {id_rubrique !IN 2,3,4}{doublons tri1}></BOUCLE0>

....vervolgens doen we een tweede lus op rubriek 4...

<BOUCLE1(ARTICLES) {id_rubrique=4}{age<60}{doublons tri1}></BOUCLE1>

...en in een laatste lus wat we gaan weergeven dankzij de anti-doublons...

<BOUCLE2(ARTICLES){par date}{!doublons tri1}>#TITRE<br></BOUCLE2>

Originele artikel: SPIP-Contrib.net.
Gepubliceerd op spip.net door Teddy

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

Vertalingen: català, English, Español, français, Nederlands