phpbar.de logo

Mailinglisten-Archive

[php] Rekursion in PHP (Kategorien,Unterkategorien)

[php] Rekursion in PHP (Kategorien,Unterkategorien)

Patrick Schuster php_(at)_phpcenter.de
Fri, 18 Oct 2002 11:34:13 +0200


Hallo Leute,

Hier mal wieder eine Deksportaufgabe damit der Freitag shneller vorbei
geht :-))

Ich will im Prinzip ein Warengruppen-Admin-Tool für einen Onlineshop
schreiben.
Dabei habe ich folgende Tabelle:

CatID : CatPID : Name
---------------------
   1  : NULL   : Cat-1
   2  : NULL   : Cat-2
   3  :    1   : Cat-1-1
   4  :    1   : Cat-1-2
   5  :    4   : Cat-1-2-1
   6  :    2   : Cat-2-1

u.s.w., also CatID ist die Eindeutige ID, CatPID jeweils die ID des
Vaterknotens...

Cat-1
	Cat-1-1
	Cat-1-2
		Cat-1-2-1
Cat-2
	Cat-2-1

Nun will ich eine Ausgabe in der Form, dass am Anfang alle Einträge mit
CatPID = NULL untereinander stehen (also hier nur Cat-1 und Cat-2).
Klickt man nun auf einen dieser Links (es soll als Parameter nur die
eindeutige CatID übergeben werden), soll exakt dieser Ast ein Level
weiter aufklappen (also nicht alles), dann kann ich bei dem
aufgeklappten Ast wieder klicken und es soll noch exakt ein Level weiter
aufgeklappt werden u.s.w. (selbstverständlich soll die Tiefe insgesamt
beliebig sein). Wenn man dann auf einen anderen Ast (z.B. Cat-2) klickt,
wird der ursprüngliche natürlich wieder eingeklappt und der gewählte
klappt sich jeweils um ein Level aus.

Nun hab ich es nach etwas basteln zwar geschafft, eine Rekursion zu
schreiben (Skript siehe unten), die mir den Baum ausgibt, allerdings
sind alle Ebenen bereits ausgeklappt. Und genau das will ich ja nicht,
da es bei z.B. 100 Unterkategorien schon sehr unübersichtlich wird.
Was mir nicht geholfen hat, sind fertige Scripts alla Ulf Wendl, da hier
die Originaldaten und das Handling zu verschieden sind.

Hat jemand was passendes für mein Problem auf Lager oder ein paar
Anregungen??

P.S.: Falls jemand den Artikel/Warengruppen-Editor vom Schlund-Shop
kennen sollte - genau so solls nachher aussehen :-)

>>>>>>>>> Skript on <<<<<<<<<<

function get_AllCats($CatID=""){
	if (empty($CatID)) {
		$sql = "SELECT CatID,CatPID,CatName from categories
where CatPID is NULL";
	} else {
		$sql = "SELECT CatID,CatPID,CatName from categories
where CatPID = '$CatID'";
	}
	$results = mysql_query($sql);
	if(empty($results)) {
		mysql_free_result($results);
		return false;
	}
	while ($row = mysql_fetch_array($results)){
		$id = $row["CatID"];
		$pid = $row["CatPID"];
		echo get_CatLevel($id,0);
		echo '<img src="pics/spacer_short.gif"
align="absmiddle"><img src="pics/fc_grau.gif" align="absmiddle">&nbsp;';
		echo "<font face='Arial' size=2><a href='$id'>";
		echo get_CatNameFromID($id);
		echo "</a></font><br>";
		get_AllCats($id);
	}
	return true;
}

get_AllCats();

>>>>>>>>> Skript off <<<<<<<<<<

Vielen Dank im voraus
Patrick


php::bar PHP Wiki   -   Listenarchive