Rolf b: Daten aus einem multidimensionalen Array mithilfe von $_GET holen

Beitrag lesen

Hallo jannnfe,

irgendwie ist es schräg, was Du machst. Offenbar hast deine Site eine hierarchische Struktur, mit Ordnern wie home und news, und darin liegen php Dateien für die einzelnen Seiten. Diese Hierarchie findet sich auch in deiner Sitemap wieder. Nicht aber in deinem $page Parameter, sondern der enthält offenbar nur den Namen der Subpage.

Mein Vorschlag wäre, dass Du auf den Page-Parameter verzichtest und dir $_SERVER['PHP_SELF'] anschaust. Wenn Du die Seite "www.jannnfe.test/news/musicnews.php" aufrufst, steht da "/news/musicnews.php" drin. Das musst Du explodieren in die Pfadbestandteile und vom letzten Teil wirfst Du das '.php' weg. Dann bekommst Du ein Array(0=>'news', 1=>'musicnews').

Damit steigst Du dann in deine Sitemap ein und läufst rekursiv hindurch. Die eigentliche Suchfunktion sollte auch gar nicht wissen, dass Du einen Titel willst, denn du hast ja noch mehr in deinen Info-Blöcken und daher ist es besser, eine getPageInfo Funktion zu bauen, sich davon die Seiteninfos liefern zu lassen und den Titel da heraus zu holen.

Du kannst natürlich auch bei deinem $page Parameter bleiben und den konstant durch die Aufrufe von getPageInfo schleifen.

$myName = $_SERVER['PHP_SELF'];
if (substr($myName, -4) == '.php')
   $myName = substr($myName, 0, -4);

// Am / zerlegen, aber einleitendes / ignorieren (gibt sonst leeren Pfadteil)
$pfad = explode('/', ltrim($myName, '/'));

$pageInfo = getPageInfo($pfad, $data);

if ($pageInfo == null)
	echo "Kein Titel gefunden für $myName\n";
else
   echo "Titel für $myName ist {$pageInfo['title']}\n";

// Suche Seiten-Info zum Pfad. SiteMap als Referenz übergeben, weil PHP sonst kopiert
function getPageInfo($path, &$siteMap) 
{
   $firstStep = $path[0];
   
   // SiteMap ist kein Array oder Pfad-Schritt nicht in der SiteMap enthalten -> null zurückgeben
   // Auch für Zuweisung an $node Referenz verwenden!
   if (is_array($siteMap)) 
		$node = &$siteMap[$firstStep];

	// $siteMap war kein Array oder enthielt den Pfadschritt nicht -> exitus
	if ($node == null) return null;
   
   // Wir sind am Ende des Pfades -> Diesen Knoten der SiteMap zurückgeben
   if (count($path) == 1)
      return $node;

   // Ansonsten weiter mit dem Rest des Pfades und den Subpages dieses Knotens
   return getPageInfo(array_slice($path, 1), $node["subpages"]);
}

Ich möchte zum Schluss anmerken, dass das Ganze nach Klassen und Objekten schreit, aber da Du noch einsteigst, ist es sicher besser wenn du nicht gleich bis Oberkante Nasenspitze in die Materie eintauchst.

Gruß Rolf