php: ordnernavigation aus pfad generieren

r4pt0r

Grand Admiral Special
Mitglied seit
08.11.2001
Beiträge
8.350
Renomée
9
Standort
BGL
Ich muss aus einem per url übergebenen pfad (var = $folder) eine navigation generieren mit der man in übergeordnete verzeichnisse wechseln kann.

also wenn der übergebene pfad /abc/def/ghi/ lautet, soll folgendes generiert werden:

Code:
<a href="index.php?folder=/abc/">abc/</a><a href="index.php?folder=/abc/def/">def/</a>
[code]

wobei dann eben als ausgabe ein in einzellinks zerlegter pfad entsteht mit dem der benutzer in die über dem aktuellen ordner liegeenden verzeichnisse wechseln kann.

benötigt werden also folgende variablen:
-der in der url zu übergebende pfad (von anfang bis position X)
-der angezeigte teil des navigationspfades (beginnt nach dem letzten / vor position X und endet an position X)
-die position X, ermittelt durch durchzählen der / (so zumindest mein grundgedanke)

mein ansatz schaut bisher so aus:

[code]
$position=2;

while ($position < strlen($folder))
{
	$position = strpos($folder,"/",$position);
	$link = substr($folder,0,$position);
	$linkecho = substr($link,strrpos($link,"/"),$position);
	echo '<a href="index.php?site='.$inc.'&folder='.$link.'">'.$linkecho.'</a>';
}

$position wird der wert zugeordnet, an welcher stelle im string $folder zum ersten mal ein / auftaucht, beginnend ab $position (daher anfangs als 2 definiert um das / am anfang zu ignorieren). $position erhöht sich somit bei jedem schleifendurchlauf wodurch von einem / in $folder zum nächsten gesprungen wird

$link besteht aus einem teil von $folder, beginnend bei 0 bis zu $position

$linkecho besteht aus dem letzten teil von $link, beginnend vom ersten von rechts auftauchenden / bis zur $position (also zur letzten stelle von $link)


wenns so auch funktionieren würde...
ergebniss ist aber scheinbar eine endlosschleife, KA was der bockmist soll.
$position ist gleich groß wie strlen($folder), sobald $position am letzten / des strings $folder angekommen ist, dann müsste er aus der schleife springen.

jemand ne idee wo mein denkfehler evtl liegt?
oder hat jemand für sowas zufällig ne andere lösung parat?
 
Hi,

also ich würde das mit split lösen. Hier meine (schnelle) Lösung:
PHP:
$parts=split("/",$_GET["folder"]);
for($i=0;$i<count($parts);$i++)
{
	for($z=-1;$z<$i;$z++)
	{
		$link.=$parts[$z+1]."/";
	}
	echo "<a href=\"index.php?folder=".$link."\">".$parts[$z]."</a><br />";
	unset($link);
}
Ist nicht ganz sauber, aber funzt.

Bye
PS
 
ah, an die split-funkltion hätte ich auch denken können :]

muchas gracias - jetzt läuft der käse endlich ;)
 
Zurück
Oben Unten