Kompliment, Du bist ganz schön geduldig.
immer schön Honig um den (nicht vorhandenen) Bart - so mach ich das auch immer, wenn ich mehr Antworten haben will ;-)
Wenn sich der User aber bspw. schon zehn Seiten "tief" weitergeklickt hat, hat er mit meiner "History" die Möglichkeit, z.B. direkt fünf Seiten zurückzugehen.
das kann sehr praktisch sein. Will ich an einer Stelle auch machen. Die Übergabe ist ja simpel, weil das Array eindimensional ist. Aber ich habe da so einen Gedanken: man sollte die angeklickten Seiten nicht einfach addieren - das macht die Brauserhistory besser. Wichtig ist, daß der Strang in die Tiefe stringent bleibt. Also z.B.:
Deine Struktur:
Seite1
|
+-Seite2
|
+-Seite3
Dein User klickt diese Reihenfolge:
Seite1, Seite2, Seite3, Seite2, Seite3
dann steht in der Brauserhistory: Seite1->Seite2->Seite3->Seite2->Seite3
in Deiner Navigation sollte aber stehen:
Seite1->Seite2->Seite3
Wenn ich eine "Navigation mit aufgeklappten Menüs" erstellen will, muß ich vielleicht nichts übergeben, aber ich muß die "Struktur" der Seiten doch vorher irgendwo abbilden (z.B. Datenbank), oder denke ich falsch?
nö, ist richtig.
Wie würdest Du das angehen?
z.B. so:
<?php
#Variablen
//Pfad zum obersten Verzeichnis des Projekts
$stammpfad = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
//Pfad vom Stammverzeichnis zur aktuellen Seite, sie uebergibt dieses Array an dieses Menuescript
//jede Seite beinhaltet also eine Variable "$ich", in der steht der genaue Pfad dorthin
$restpfad = array('obst','kernobst','Birnen');
//Abbildung der Sitestruktur, am besten mit PHP erzeugen
$navi = array();
$navi['getraenke'] = array();
$navi['getraenke']['Milch'] = 'Milch.html';
$navi['getraenke']['Bier'] = 'Bier.html';
$navi['getraenke']['Saft'] = 'Saft.html';
$navi['obst'] = array();
$navi['obst']['kernobst'] = array();
$navi['obst']['kernobst']['Aepfel'] = 'Aepfel.htm';
$navi['obst']['kernobst']['Birnen'] = 'Birnen.php';
$navi['obst']['beeren'] = array();
$navi['obst']['beeren']['Erdbeeren'] = 'Erdb.html';
$navi['fleisch'] = array();
$navi['fleisch']['Rind'] = 'Rind.html';
$navi['fleisch']['Schwein'] = 'Schwein.html';
function navi_ausgeben($navi, $restpfad, $pfad)
{
//fuer jede tiefere Verzeichnisebene mehr Einzug (kann man auch mit Listen machen)
foreach($pfad as $irgendwas)
$einzug .= ' ';
//gesamte Site auf oberster Ebene durchrattern
foreach($navi as $kategorie=>$element)
{
//Array: das Element ist ein Verzeichnis
if(is_array($element))
{
//Verzeichnis lieg auf dem Pfad zur aktuell markierten Seite
if($restpfad[0]==$kategorie)
{
//Verzeichnis ohne Link ausgeben
echo $einzug.'<b>'.$kategorie.'</b><br>';
//Pfad _bis_ hierher merken und Pfad _von_ hier bis zur Seite um einen Schritt kuerzen
$pfad[] = array_shift($restpfad);
//Site auf aktuell tieferer Ebene erneut durchrattern
navi_ausgeben($navi[$pfad[count($pfad)-1]], $restpfad, $pfad);
//danach Pfade wieder rueckgaengig machen (Rekursion springt eine Verzeichnisebene hoeher)
array_unshift($restpfad, array_pop($pfad));
}
//Verzeichnis liegt nicht auf dem Pfad zur aktuell markierten Seite: als Link ausgeben
else
{
echo $einzug.'<b>'.'<a href="'.join('/', $pfad).'/'.$kategorie.'/">'.$kategorie.'</b></a><br>';
}
}
//kein Array: das Element ist eine Seite
else
{
if($restpfad[0] == $kategorie)
//Element ist die aktuell markierte Seite
echo $einzug.$kategorie.'<br>';
else
//Element ist eine andere Seite im gleichen Verzeichnis
echo $einzug.'<a href="'.join('/', $pfad).'/'.$element.'">'.$kategorie.'</a><br>';
}
}
}
navi_ausgeben($navi, $restpfad, array($stammpfad))
?>
Wir spieln heute mal getPHP ;-)
Ich hab das jetzt mal fertiggebastelt, weil ich demnächst auch sowas brauche :-)
Gruß, Andreas
<img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
hier könnte auch ruhig mal'n neues Bild stehen.