Problem Kategoriestruktur
am 14.09.2006 10:08:26 von Tom Graz
Hallo,
ich sitze seit längerem an einem Problem und finde keine Lösung.
Vielleicht weiss hier jemand weiter. Und zwar habe ich eine Tabelle mit
verschiedenen Kategorien.
Aufbau
ID,PARENT,NAME
wobei der Parent logischerweise immer die Elternkategorie darstellt.
Soweit so gut. Mein Problem ist nun, dass ich nicht nur einfach eine
Liste erstellen möchte, sondern eine Auflistung nach folgendem Muster
->->
->->
->->
->->
4.1>
usw.
Also ähnlich der Kategorieauflistung bei eBay oder so.
Hier mal ein Ausschnitt aus meinem bisherigen Code:
****SCHNIPP****
function get_all_subcats ($startcat)
{
global $db;
static $ebene=0,
$subcat_array;
$result = $db->Execute ("SELECT * FROM categories WHERE
parent=$startcat");
while (!$result->EOF)
{
$subcat_array [] = $result->fields ['categories_id'];
$result->MoveNext ();
$ebene++;
$this->get_all_subcats ($result->fields ['categories_id']);
$ebene--;
}
return $subcat_array;
}
**** SCHNAPP ****
Die Funktion funktioniert soeweit, nur bekomm ich die oben geforderte
Auflistung so nicht hin. Er listet immer alle Unterkategorien auf.
Ich bekomms einfach nicht hin. Hat jemand vielleicht schonmal eine
solche Lösung programmiert und kann mir helfen.
Danke und Gruß
Tom
Re: Problem Kategoriestruktur
am 14.09.2006 17:10:25 von Thomas Grabietz
Hallo Tom,
ich habe jetzt leider keine Zeit, die komplette Rekursion zu schreiben. Mir
fällt nur auf, dass dein Code nicht funktionieren kann. Da du das Array
$subcat_array in jedem Aufruf neu initialisierst und nur das letzte Array
zurückgibst. Du willst aber das letzte Blatt auf den aufrufenden Zweig
legen und diesen wieder auf den Aufruf undsoweiter.
Dazu müsste eine Zeile wie diese irgendwo zu finden sein.
$subcat_array['current_id'][]=$this->get_all_subcats ($result->fields
['categories_id']);
//lege alles was du in der Iteration bekommst auf den gleichen Stapel
..
..
..
return $subcat_array //gebe den kompletten Stapel einen Aufruf höher zurück
Sorry, ist jetzt in die Tüte gesprochen, aber guck es Dir noch mal an.
current_id ist auch nur ein synonym für einen eindeutigen Bezeichner in
diesem Funktionsaufruf , oder spiele es mit 2 Ebenen "Step by Step" durch
und schreibe dann die Rekursion.
Gruà Tom
Tom Graz wrote:
> Hallo,
>
> ich sitze seit längerem an einem Problem und finde keine Lösung.
> Vielleicht weiss hier jemand weiter. Und zwar habe ich eine Tabelle mit
> verschiedenen Kategorien.
> Aufbau
>
> ID,PARENT,NAME
>
> wobei der Parent logischerweise immer die Elternkategorie darstellt.
>
> Soweit so gut. Mein Problem ist nun, dass ich nicht nur einfach eine
> Liste erstellen möchte, sondern eine Auflistung nach folgendem Muster
>
> ->->
> ->->
> ->->
> ->->
> 4.1>
>
>
> usw.
> Also ähnlich der Kategorieauflistung bei eBay oder so.
>
> Hier mal ein Ausschnitt aus meinem bisherigen Code:
>
> ****SCHNIPP****
>
> function get_all_subcats ($startcat)
> {
> global $db;
> static $ebene=0,
> $subcat_array;
>
> $result = $db->Execute ("SELECT * FROM categories WHERE
> parent=$startcat");
> while (!$result->EOF)
> {
> $subcat_array [] = $result->fields ['categories_id'];
> $result->MoveNext ();
> $ebene++;
> $this->get_all_subcats ($result->fields ['categories_id']);
> $ebene--;
> }
> return $subcat_array;
> }
>
> **** SCHNAPP ****
>
> Die Funktion funktioniert soeweit, nur bekomm ich die oben geforderte
> Auflistung so nicht hin. Er listet immer alle Unterkategorien auf.
>
> Ich bekomms einfach nicht hin. Hat jemand vielleicht schonmal eine
> solche Lösung programmiert und kann mir helfen.
>
>
> Danke und GruÃ
>
> Tom