| | | | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Erfahrener Benutzer Registriert seit: 07.11.2003
Beiträge: 526
![]() | tja... ich habe mich sehr vohl mit den nested sets befasst. nicht dass denkst ich sehe mir das alles nicht an. es ist auch nicht so schwer zu verstehen und die einträge zu machen ist auch nicht so schwer. ALLERDINGS lässt sich mein problem (und ich habe lange darüber nachgedacht und gedankengänge versucht) damit meines erachtens nicht lösen, dass wenn ich eine unterunterunterkategorie habe, diese und NUR diese aufgeklappt dargestellt wird. bei den ersten kategorien funktioniert das super mit den lft´s 12345... aber was ist wenn die kategorie 3 mit unterkategorien aufzuklappen ist. wie komme ich dann zur top kategorie. (siehe kategorie [13-14]) Code: 1-20
2-7 8-9 10-19
3-6 11-18
4-5 12-17
13-14 15-16
zu obigem problem: eine funktion die rekursiv alle parent_menüpunkte ausliest ist mir klar. ABER wie kann ich das dann mit dem root-array kombinieren? ich werde mich jetzt aber mal dransetzen und das so machen wie du mir gesagt hast. wie du siehst... ich bin ja nicht faul und für alles offen und möchte lernen. bei so komplexen dingen (und vor allem rekursionen) hab ich dann aber schnell mal einen knopf im hirn EDIT: ich bin sehr sehr froh dass es nicht nur MIR so geht, sondern dass mehr leute das nicht checken
__________________ mfg Alexander Haim |
| |
| | |
| Moderator und Wett-König | Hallo Promaetheus, hier ist objektorientierte Programmierung eine recht interessante Hilfe. Ich habe das mal vor 2 Jahren so gelöst: - mein Mapper (Datenschicht) läd in abstrahierter Form Baum-Knoten-Objekte aus der Datenbank. Dieser hat zudem Methoden zum Speichern oder Löschen eines Knotens. - mein Manager (Business-Schicht) kann die Baum-Knoten-Objekte verarbeiten und Methoden des Mappers zum Laden des Baumes verwenden. Das sieht ungefähr so aus: Mapper: [php]<? class BaumMapper { var $__Config; var $__SQL; function BaumMapper($Abschnitt){ $iH = new iniHandler('config::modules::baumstruktur'); $this->__Config = $iH->zeigeAbschnitt('baumstruktur',$Abschnitt); unset($iH); $this->__SQL = &Singleton::getInstance('MySQLHandler'); // end function } function ladeDatenFuerPfad($Pfad){ } function ladeDatenFuerRoot(){ } function ladeEinzelnenKnotenPerIndex($Index){ $select = "SELECT ".$this->__Config['T_Name']." AS Name, ".$this->__Config['T_VaterID']." AS VaterID, ".$this->__Config['T_Typ']." AS Typ, ".$this->__Config['T_Link']." AS Link, ".$this->__Config['T_Datum']." AS Datum , ".$this->__Config['T_Uhrzeit']." AS Uhrzeit, ".$this->__Config['T_Index']." AS PTIndex FROM ".$this->__Config['T_Tabelle']." WHERE ".$this->__Config['T_Index']." = '".$Index."'"; $result = $this->__SQL->executeTextStatement($select); $data = $this->__SQL->fetchData($result); $Knoten = $this->__mappeAlsDomainObjekt($data); unset($SQL); return $Knoten; // end function } function ladeAlleOrdner(){ } function speichereOrdnerKnoten($Knoten){ } function speichereDateiKnoten($Knoten){ } function hatKnotenKinder($Knoten){ } function loescheKnoten($Knoten){ } function __mappeAlsDomainObjekt($ResultSet){ $Knoten = new BaumKnoten(); if(isset($ResultSet['Name'])){ $Knoten->setzeName($ResultSet['Name']); // end if } if(isset($ResultSet['VaterID'])){ $Knoten->setzeVaterID($ResultSet['VaterID']); // end if } if(isset($ResultSet['Typ'])){ $Knoten->setzeTyp($ResultSet['Typ']); // end if } if(isset($ResultSet['Link'])){ $Knoten->setzeLink($ResultSet['Link']); // end if } if(isset($ResultSet['Datum'])){ $Knoten->setzeDatum($ResultSet['Datum']); // end if } if(isset($ResultSet['Uhrzeit'])){ $Knoten->setzeUhrzeit($ResultSet['Uhrzeit']); // end if } if(isset($ResultSet['PTIndex'])){ $Knoten->setzeIndex($ResultSet['PTIndex']); // end if } return $Knoten; // end function } // end class } ?>[php] Manager: [php:aa6241b09f]<? class BaumManager { var $__M; var $__Session; function BaumManager($Konfiguration = 'Standard'){ $this->__M = new BaumMapper($Konfiguration); $this->__Session = new sessionManager('BaumAnzeige'); // end function } function ladePfadeInSession(){ // Läd die Pfade aus der Session und aus dem Request um festzustellen, //bis zu welchem Knoten der Baum aufgebaut werden muss } function speichereKnoten($Knoten){ if($Knoten->zeigeTyp() == 'file'){ $this->__M->speichereDateiKnoten($Knoten); // end if } if($Knoten->zeigeTyp() == 'dir'){ $this->__M->speichereOrdnerKnoten($Knoten); // end if } // end function } function ladeBaum(){ $Baum = $this->ladeRoot(); $this->ladeKnoten($Baum->zeigeIndex(),&$Baum); return $Baum; // end function } function ladeRoot(){ return $this->__M->ladeDatenFuerRoot(); // end function } function ladeKnoten($Pfad,$Baum){ // Baum-Teile per Pfad laden $PfadDaten = $this->__M->ladeDatenFuerPfad($Pfad); // Pfad aus Session lesen $Pfad = $this->__Session->loadSessionData('Pfad'); if($Pfad == false){ $Pfad = array(); // end if } // Baum rekursiv aufbauen for($i = 0; $i < count($PfadDaten); $i++){ // Weitere Ebene erzeugen, oder nur Kind anfügen if(in_array($PfadDaten[$i]->zeigeIndex(),$Pfad)){ // Neues Kind einfügen $Tmp = $PfadDaten[$i]; // Zeige Kind-Knoten auf den ausgewählten Knoten anwenden $this->ladeKnoten($PfadDaten[$i]->zeigeIndex(),&$Tmp); // Knoten in Vater einsetzen $Baum->setzeKind($Tmp); // end if } else{ // Neues Kind einfügen $Tmp = $PfadDaten[$i]; // Knoten in Vater einsetzen $Baum->setzeKind($Tmp); // end else } // end for } // end function } // end class } ?>[/php:aa6241b09f] Die Code-Beispiele sind gekürzt, da nicht alles relevant ist. Das sollte dir ein ungefähres Verständnis geben, wie so eine Rekursion aussehen kann.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Nested Sets und viele Fragen... | BartTheDevil89 | Datenbanken | 7 | 13.08.2008 10:18 |
| nested set dbmodell subtrees verschieben | raffnix | Datenbanken | 12 | 08.06.2008 13:27 |
| Nested Sets oder Rekursion? | litterauspirna | PHP Tipps 2008 | 8 | 06.06.2008 16:57 |
| Nested Sets in ein Mehrdimensionales Array | Simon9990 | PHP-Fortgeschrittene | 2 | 29.10.2007 17:38 |
| Nested Sets Query | GSJLink | Datenbanken | 12 | 08.09.2007 10:55 |
| nested oder getrennt? was meint ihr? | Promaetheus | PHP Tipps 2006 | 4 | 01.07.2006 18:18 |
| Nested Sets und Silbings | nightfreak | Datenbanken | 10 | 06.01.2006 13:58 |
| Nested Sets History | Sirke | PHP-Fortgeschrittene | 1 | 21.10.2005 08:50 |
| erklärung gesucht: nested set query! | Sirke | Datenbanken | 0 | 19.09.2005 17:24 |
| Alternative zu Nested Sets | fantast | Datenbanken | 1 | 16.08.2005 01:14 |
| hilfe nested sets | zapate | Datenbanken | 6 | 02.08.2005 02:58 |
| Nested Sets mit Berechtigungen? | daniel987 | Datenbanken | 3 | 07.06.2005 22:18 |
| Frage zu nested sets... | PHP-Fortgeschrittene | 2 | 04.03.2005 09:57 | |
| Nested Set Trees und Pfade | Datenbanken | 0 | 16.12.2004 16:51 | |
| NESTED SETS dieses Thema sollte abgehakt werden | PHP Tipps 2004 | 0 | 12.10.2004 18:18 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| php nested set kombinieren mit array, nested set baumstruktur mit while php, php nested sets rekursion array |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.