Styleguide

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.";
        }
        ?>