Problem Kategoriestruktur

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