Footer
Die HTML-Footer-Syntax wird über den folgenden Link mit einem Data-Attribut und einem Zeitstempel zur Verfügung gestellt. Sie ist als Vorgabe für alle GESIS-Websites zu verwenden. Dadurch soll bei aktuellen redaktionellen Änderungen ein GESIS-weit einheitlicher Stand gewährleistet werden, gerade weil dieser Prozess nicht Teil einer Entwicklungspipeline ist. Das Styling erfolgt über die gesis-web.css aus dem Webpack.
Footer Syntax:
DE:
https:// gesis.org/home?type=1740147428
EN:
https:// gesis.org/en/home?type=1740147428
Aufgrund des integrierten Zeitstempels aus der Footer-API ist es wichtig, die Syntax im eigenen System zu cachen und sie durch entsprechende technische Umsetzung regelmäßig auf Aktualität zu prüfen.
PHP Cache Beispiel
Hier ist ein Beispiel für einen möglichen Aufbau eines PHP-gesteuerten Cachings. Das sollte nicht als Vorgabe gesehen werden. Die genaue Umsetzung hängt vom jeweiligen System und den Speichermöglichkeiten ab.
<?php
$url = "https:// gesis.org/home?type=1740147428";
$cacheFile = __DIR__ . '/cache/footer.html';
// Stelle sicher, dass der Cache-Ordner existiert
if (!is_dir(__DIR__ . '/cache')) {
mkdir(__DIR__ . '/cache', 0777, true);
}
// cURL initialisieren
$ch = curl_init($url);
// Falls ein Cache existiert, hole den Zeitpunkt der letzten Cache-Aktualisierung
if (file_exists($cacheFile)) {
// Nutze filemtime, um das Datum der letzten Cache-Aktualisierung zu erhalten
$lastModified = filemtime($cacheFile);
// Formatierung nach RFC 1123 für den If-Modified-Since Header
$ifModifiedSince = gmdate('D, d M Y H:i:s', $lastModified) . ' GMT';
curl_setopt($ch, CURLOPT_HTTPHEADER, array("If-Modified-Since: $ifModifiedSince"));
}
// cURL-Optionen setzen
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true); // Damit wir auch die HTTP-Header erhalten
$response = curl_exec($ch);
// HTTP-Statuscode und Header-Größe ermitteln
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
curl_close($ch);
// Die Header und den Body trennen
$headers = substr($response, 0, $headerSize);
$body = substr($response, $headerSize);
if ($httpCode == 304 && file_exists($cacheFile)) {
// Kein Update: Verwende den lokal gecachten Footer
$html = file_get_contents($cacheFile);
} else {
// Neues Update: Speichere den aktuellen Body im Cache
$html = $body;
file_put_contents($cacheFile, $html);
}
// HTML parsen und den data-updated Zeitstempel auslesen
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML($html);
libxml_clear_errors();
$xpath = new DOMXPath($dom);
// Hier wird einfach das erste <footer> Element gesucht, ohne nach einer spezifischen Klasse zu filtern
$footerNodes = $xpath->query("//footer");
if ($footerNodes->length > 0) {
$footer = $footerNodes->item(0);
$lastUpdated = $footer->getAttribute("data-updated");
echo "Footer zuletzt aktualisiert am: " . htmlspecialchars($lastUpdated);
} else {
echo "Footer nicht gefunden.";
}
?>