Chronologische Navigation

Erstellt: 08.03.2022 Geändert: 13.11.2023 Lesedauer ≤ 1 Min.

Mit diesem Script werden Links zum (chronologischen) Vorgänger und Nachfolger der aktuellen Datei im aktuellen Ordner erzeugt (s. Seitenende).

Maßgeblich ist das Publikationsdatum der Datei. Ausgehend vom Speicherdatum wird nach dem Parameter „published“ und „modified“ gessucht und das in dieser Reihe zuletzt gefundene Datum verwendet.

Querverweis

Modul Chronologische Navigation

Das Skript

Stand: 27.12.2022

Ladefehler: $$$ file a $$$

<?php
// @ vor einer Funktion unterdrückt Fehlermeldungen
// $matches[1] ?? null → gibt auf jeden Fall was zurück, auch wenn die Variable/der Schlüssel undefiniert ist
function chrono($stil) {
    
$talt 'Älterer';     
    
$takt 'Aktueller';
    
$dalt 'Das älteste Dokument';
    
$dakt 'Das aktuellste Dokument';
    
$aktuell $_SERVER["DOCUMENT_ROOT"].$_SERVER["REQUEST_URI"].'.php';
    
$aktuell str_replace('.php.php','.php',$aktuell);
    
preg_match("/<title>(.+)<\/title>/siU", @file_get_contents($aktuell), $matches);
    
$titel = (Trim($matches[1] ?? null) ? Trim($matches[1] ?? null) : '') ;
    
$cur = @get_meta_tags($aktuell);
    
$curdat = @date("Y-m-d", @filemtime($aktuell));
    
$curdat = Isset($cur['published']) ? $cur['published'] : $curdat;
    
$curdat = Isset($cur['modified']) ? $cur['modified'] : $curdat;
    
$curdat .= @date (' H:i:s', @filemtime($aktuell)) . $titel;
    
$items glob('./*{php,html}'GLOB_BRACE);
    if (
count($items)) {
        
$i 0;
        foreach (
$items as $item){            
            if (
$item == 'index' or $item == '.' or is_dir($item)){   }
            else {
                
preg_match("/<title>(.+)<\/title>/siU"file_get_contents($item), $matches);
                if (
$matches) {
                    
$Datei[$i]['titel'] = $matches[1];
                    
$Datei[$i]['pfad'] = pathinfo($itemPATHINFO_DIRNAME) .'/'pathinfo($itemPATHINFO_FILENAME);
                    
$Datei[$i]['comp'] = date ('Y-m-d'filemtime($item));
                    
$tags get_meta_tags($item);
                    
$Datei[$i]['comp'] = (Isset($tags['published'])) ? $tags['published'] : $Datei[$i]['comp'];
                    
$Datei[$i]['comp'] = (Isset($tags['modified'])) ? $tags['modified'] : $Datei[$i]['comp'];
                    
$Datei[$i]['comp'] .= date (' H:i:s'filemtime($item)) . $Datei[$i]['titel'];
                }
            
$i++;
            } 
        } 
// foreach    
        
array_multisort (array_column($Datei'comp'), SORT_ASC$Datei);
        
$i 0;        
        foreach (
$Datei As $Inhalt){
            if (
$Datei[$i]['comp'] < $curdat) {
                
$vorher $i;
            }
            if (
$Datei[$i]['comp'] > $curdat) {
                
$nachher $i;
                Break;
            }
            
$i++;
        }

        
$Ergebnis '<div class="' $stil '"><span>';
        
$Ergebnis .=  (isset ($vorher) ? '<a href="'.$Datei[$vorher]['pfad'] .'" title="'.$talt.'">'. ((strlen($Datei[$vorher]['titel'])>30) ? mb_substr($Datei[$vorher]['titel'],0,30).'…' $Datei[$vorher]['titel']).'</a>' $dalt);
        
        
$Ergebnis .=  '</span><span>←&#x25BC;→</span><span>';

        
$Ergebnis .=  (isset ($nachher) ? '<a href="'.$Datei[$nachher]['pfad'] .'" title="'.$takt.'">'.((strlen($Datei[$nachher]['titel'])>30) ? mb_substr($Datei[$nachher]['titel'],0,30).'…' $Datei[$nachher]['titel']).'</a>' $dakt);
                
        
        
$Ergebnis .= '</span></DIV>';
    }  
// count
    
else {
        
$Ergebnis '';
    }
    Return 
$Ergebnis;
}