Rekenen met een datum

SPIP stelt een aantal voorwaardes ter beschikking waarmee aan de hand van de belangrijkste datumvelden van de SPIP objecten gerekend kan worden. Maar wat als je database een extra datumveld bevat...

De belangrijkste voorwaarde is waarschijnlijk age... wat als voorwaarde in een lus kan worden gebruikt. Maar wat als je database een extra datumveld bevat (dat werd toegevoegd door een plugin of je zelf toevoegde met de interface van plugin Champs Extra).

Het meest overzichtelijke is waarschijnlijk het gebruik van een lokale variabele die je definieert met het baken #SET. Hierop kun je vervolgens berekeningen toepassen.

Zelf een baken maken

Je kunt aan SPIP je eigen bakens toevoegen. Wanneer je een beetje PHP kent, is dat relatief simpel te doen, maar zelfs zonder deze kennis kun je toch eenvoudig een baken toevoegen.

In onderstaand voorbeeld gaan we een baken maken dat de datum van de volgende dag bevat. We noemen het #MORGEN en we voegen dit toe aan ons bestand squelettes/mes_fonctions.php:

function balise_MORGEN($params) {
$params->code = "date('d-m-Y', time()+24*3600)";
$params->type = 'php';  
return $params;
}

In de functie selecteren we de datum van vandaag en tellen er 24*3600 seconden bij op.

Eigenlijk is dit heel eenvoudig te realiseren en je bent misschien geneigd om nu ook een baken te maken voor #OVERMORGEN, #GISTEREN en #EERGISTEREN. Maar wanneer je deze slechts eenmaal ergens gebruikt, is deze oplossing toch niet aan te raden.

De voorwaarde uitschrijven

Sinds versie 1.9 beschikt SPIP over het baken #EVAL, waarmee de evaluatie van de PHP expressie kan worden uitgevoerd. In een lus (BREVES) kun je als volgt de berichten van gisteren selecteren: {date_heure==^((#EVAL{date("Y-m-d", strtotime("-1day"))}))} In een lus (ARTICLES) gebruik je: {date==^((#EVAL{date("Y-m-d", strtotime("-1day"))}))}

Zelf een filter maken

We kunnen zelf een filter aan SPIP toevoegen dat met een datum kan rekenen. We krijgen dan een filter in de vorm [(#DATE|minus_dagen7)].

Net als bij het zelfgemaakte baken moeten we de code (in PHP) toevoegen aan ons bestand squelettes/mes_fonctions.php:

function minus_dagen($arg1,$arg2) {
$resultaat = strtotime($arg1);
$resultaat = $resultaat-(24*3600*$arg2);
$resultaat = date('Y-m-d',$resultaat);
return $resultaat;
}

Je leest hierover meer in artikel De filters van SPIP.

Een constante gebruiken

Houd je je code liever overzichtelijk of zet je liever geen complexe voorwaarden in je lussen, dan kun je ook gebruik maken van een constante: #SET{mijndatum,#EVAL{date("Y-m-d", strtotime("-1month"))}

In de lus plaats vergelijk je nu in de conditie met de constante (#GET{mijndatum}), bijvoorbeeld om alle artikelen van de afgelopen maand (vanaf dezelfde dag in de vorige maand) te selecteren. Je kunt dit ook met age doen, maar alleen op de standaard datumvelden van de SPIP objecten.

Lees ook: Datumbeheer.

Auteur Hanjo Gepubliceerd op: Aangepast: 19/04/23