Hello Sven,
vielen Dank für diesen ausführlichen Beitrag. Ich pflichte Dedlfix' bitte bei :-)
Bis vor den "Decorator" konnte ich Dir folgen. Nur, wie dieser auszusehen hat, habe ich noch nicht durchschaut.
Aktuelle komplette Anwendung:
$links = array('Home', 'Impressum');
$decorator = new Navi_Decorator();
$navi = new Navi($links, $decorator);
$navi->getHtmlMenu();
>
> Du siehst: Obwohl die Funktionalität sich außen kaum verändert, werden durch die inneren Komponenten, die man von außen mit hineintut, eventuell gewaltige Dinge bewegt. Deshalb noch als letztes die Sache mit den diversen Eigenschaften, die ein Link außer seinem Text hat: Linkziel und ggf. target.
>
> Diese Dreierkombination passt eigentlich ziemlich gut ebenfalls wieder in eine Klasse:
>
> ~~~php
class Navi_Link
> {
> public $label = "";
> public $url = "";
> public $target = "";
> }
>
Ich habe bisher immer reine Datenklassen gebaut und dann in einer "Bind-Class" die Daten mit den Templates verbunden. Das könnten ja auch andere, als HTML sein.
Die Templates bestehen bei mir aus mehrern Teilen: Statischer Teil "Frame" und dynamische Teile "Repeat-Areas".
Ein fertiges Datenobjekt besteht daher auch aus dem statischen Teil und ggf. mehreren Repeat-Areas.
So ist es auch möglich, dass Templates aus dem Userspace geladen werden, während Funktionalität und Daten nur aus dem "Supervisor-Space" kommen.
Wie ich das "ich übergebe Datenblöcke als Arrays" aber nun in saubere OOP verwandele, wo echte Objekte übergeben werden müssen und auch nur die passenden übergeben werden können, ohne dabei die Universalität der Bind-Klasse zu verlieren, da hänge ich jetzt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg