Page 1 of 1

Tree Module is evil !?!

Posted: 15 Jun 2008, 23:25
by Shuairan
Hi,

erstmal Danke für die Phoca Gallerie und alles was so dazugehört, ist echt eine der besten Erweiterung für Joomla :)

Weswegen ich hier poste ist ein Problem über das ich beim Tree Modul gestolpert bin:
Die Funktion categoryTree in mod_phocagallery_tree.php ist anscheinend ineffiziener als es sein müsste, diese 'rekursiven' Aufrufe verursachen einen quadratischen Aufwand ( n+n^2 )

Schuld daran ist wie gesagt der rekursive Aufruf, der imho garnicht benötigt wird:

Code: Select all

line 114
if ($value->parentid == $id)
{	
	$tree[$value->id] = $showText;
	$tree = categoryTree($data, $tree, $value->id, '', $treeId);	
}	
was bezweckt dieser Code genau? das ganze funktioniert nämlich auch wenn man ihn mit folgendem Code ersetzt:

Code: Select all

$tree[$value->id] = $showText;
Also die jeweilge Zeile für dtree direkt in den Array schreibt, und nicht erst wenn $value->parentid == $id

Vielleicht hab ich auch was übersehen, kannst es ja mal bei dir ausprobieren.

MfG, Shuairan

Re: Tree Module is evil !?!

Posted: 16 Jun 2008, 10:18
by Shuairan
Ah hab noch was dazu rausgefungen: Also zufälligerweise sind meine Testgallerien schon hierarchisch sortiert, deswegen hat bei mir alles funktioniert.

dTree braucht logischerweise für die Erzeugung die Parent-Elemente vor den Child-Elementen, das was da gemacht wird ist also eine Topologische Sortierung.

Glaube kaum das es in dem Fall eine Optimierung vom Algorithmus gibt, das einzige was man wohl verbessern kann ist wenn man die getLink Funktion nur aufruft wenn auch was mit dem Ergebnis angefangen wird, d.h. die zwei Zeilen

Code: Select all

      $link = getLink ( $value->id );
      $showText =[...]
noch mit in die if-Abfrage zu schieben.
Dann werden doch einige unnötigen Abfragen ans Menü weggelassen 8)

Re: Tree Module is evil !?!

Posted: 17 Jun 2008, 13:39
by Jan
Hallo, be dem ersten geht es um die Sub Kategorien und verschiedenen Levelen. Bei dem zweiten geht us um Finden von Itemid, wenn es gibt... Leider haben module keine Itemid, so die brauchen es von Komponent übernehmen...

$value->parentid == $id

das heisst, dass es noch Subkategorien geben, so die Funktion mus rekursiv noch eingerufen werden (für die nächsten Levelen von Kategorien)

Jan