Was ist eigentlich Zend_Layout? Nichts genaues weiß man nicht. Dies ist kein Tutorial, sondern eine Erklärung, wie es funktioniert.

The little basic

Was ist Zend_Layout? Fragt man nach, wird man von mir die Antwort bekommen "Es ist ein Two-Level-Layout". Alternativen sind "Two-Way-Layout" und noch einige Andere, inklusive jeweiliger deutscher Übersetzung. Hilft das irgendwen? Wenn man es vorher noch nicht wusste, nein, wenn man es vorher wusste, hätte man nicht gefragt. Bleibt: Nein.

Man stelle sich aus der eigenen Kindheit kleine Klötzchen vor: Man nehme einen Stern, ein Quadrat, ein Dreieck und ein Rechteck. Dazu gibt es eine Box mit entsprechenden Löchern. Jedes hat seinen Platz und passt genau rein. Hat alles gepasst, ist das Ding vollständig.

Und nu?

Viel anders funktioniert ein Layout der Größenordnung auch nicht. Es spricht nichts dagegen den hauseigenen ViewRenderer aktiviert zu lassen, nur so nebenbei. Jetzt benennen wir die Objekte einfach mal: "Quadrat" nennen wir jetzt content, "Dreieck" heißt navigation, "Stern" heißt Footer und "Rechteck" ist ... irgendetwas was jetzt hier fehlt. Nennen wir nun noch den Kasten, in den wir alles reinstecken Layout ist ein Großteils des Zaubers garnicht mehr so magisch

Bob the Builder on Zend

Zend_Layout macht nicht viel anders. Es hat ein Layout, meisten nennt es sich layout.phtml, das einige Platzhalter der Form $this->layout()->name enthält. name ist dabei zB content, oder navigation oder Vergleichbares. Wer jetzt aufgepasst hat, hat nen Aha-Effekt: Die Klötzchen. Nur woher kriegt man sie? Selber bauen hält fit ;) Man rendert sie "altertümlich" über ein beliebiges View-Objekt ($view->render('navigation.phtml') und den Rückgabewert fängt man auf. Damit hat man den Klotz, jetz nur noch einen Namen vergeben. Zu jedem Request gehört ein Response, an den man über verschiedene Wege ran kommt. In das Response-Objekt kann man benannte Body-Segmente einsetzen. Ich betone mal kurz: Benannt! Alles klar? ;) name im Layout ist immer der Name, den man dem benannten Body-Segment gegeben hat.

Eine Ausnahme dann doch noch: Der ViewRenderer rendert gerne selbst. Das sollte man auch nicht unterbinden, ist halt ein fleissiger Bursche. Layout ist so geschickt und setzt ihn als als Name content ein. So kommt man immer brav an das gerenderte Ding der aktuellen Action. Gleichzeitig bedeutet das, das man es tunlichst sein lassen sollte sein eigene Segment content zu nennen. Ausser natürlich das Verhalten ist gewollt. ;)

Das hilft mir ja voll nicht!!!

Ich sagte, dies ist eine Erläuterung. Die Einzelheiten zur Verwendung finden sich im offiziellen Manual. Nachfragen hilft aber auch manchmal ;)

Two Level?

warum aber jetzt "Two-Level-Layout" oder einer der anderen Bezeichnungen, die meistens eine "Zwei" im Namen tragen? Einfach mal abzählen: Gerenderte "Ausgangs"-Klötzchen: 1. Das Layout: 2 ;) Insgesamt also zwei Schichten. Theoretisch wäre es denkbar das Layout selbst wiederum in ein anderes Layout einzusetzen und so weiter. Über den Sinn und Unsinn mag man streiten. Eine Sache ist allerdings klar: Kein System leistet mehr, als das andere. Es ist bloss mehr oder weniger komplex. In manchen Situationen macht es Sinn,  in anderen nicht.

Um eine Frage vorweg zu nehmen: Zend_Layout ist ein reines 2-Ebenen-Layout-System.

baba

Gruß, euer Müsli :)