Fortgeschrittene Anwendung der Tree Komponente
Das Tree Behaviour von CakePHP nutzt die Modified Preorder Tree Traversal (MPTT) Technik. Im Gegensatz zur hierarchischen Speichermethode für Bäume, werden hierbei Teilmengen gebildet und durch die Parameter “left” und “right” eingegrenzt. Dieser Artikel enthält eine Grafik die dass Prinzip sehr schön verdeutlicht. Um an eine Teilmenge in Form eines Astes oder “Nodes” zu gelangen, werden einfach die Parameter ‘left’ und ‘right’ genutzt.
Mit den eingebauten Methoden des Behaviours Tree stößt man relativ schnell an Grenzen, deswegen ist das Wissen um die einfache Handhabung der Daten sehr wichtig. Um zum Beispiel an alle Kind Elemente eines Baumes zu gelangen bietet Tree die Methode children() an. Was aber wenn nur die Children geholt werden sollen deren Name mit A beginnt, oder dem status active oder die Daten sollen in eine Pagination geschossen werden? Ganz klar, die Daten müssen mit der find() Methode des Models geholt werden. Hier ein wenig Sample Code für eine Tree Pagination:
<?php class UsersController extends AppController { var $name = 'Users'; function search(){ // Wir holen den gewünschten Eintrag aus der DB // anhand des Primärschlüssels $user = $this->User->findById(1); // Wir nutzen dessen left und right Werte um ´ // den Ast einzugrenzen $search_options = array( 'User.lft > ' => $user['lft'], 'User.rght < ' => $user['rght'] ); // Fügen hier noch die besondere Suchbedingung ein $search_options['User.lastname LIKE '] = ."a%"; // Und übergeben den Rest dem Pagination Helper $this->set('users', $this->paginate('User', $search_options)); } }
So einfach ist das…im Prinzip…
Ein weiterer guter Artikel der sich mit dem Thema beschäftigt findet sich hier. Es gibt auch eine sehr einfache Formel um die Anzahl der Kinder eines Knotens zu ermitteln, dazu ist kein SQL notwendig und deswegen hervorragend für die Verwendung innerhalb von Views geeignet.
Anzahl Nodes = (right – left – 1) / 2
In diesem Zusammenhang:
- Verwirrende Signatur von Tree generatetreelist() Das Behaviour Tree von CakePHP ist schon recht nützlich, aber...
- Von CakePHP, Ajax Problemen und der Security Komponente Wer die “Security” Komponente von CakePHP in seinen Projekte einsetzt,...
- CakePHP – Ein Template in eine Variable rendern Oft genug kommt man als PHP Programmierer in die Situation...