Chronologische Navigation

Erstellt am 08.03.2022 Aktualisiert am 14.02.2024 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

<?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($item, PATHINFO_DIRNAME) .'/'. pathinfo($item, PATHINFO_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;
}