Ich möchte eine dynamische Seite mit Zend_Layout erstellen.
Mein Layout (/application/layouts/scripts/layout.phtml) enthält die folgenden Zeilen:
%Vor%Wenn ich zu meiner Index-Controller-Index-Aktion navigiere - rendert Zend die Index-Ansicht (application / views / scripts / index / index.phtml) automatisch innerhalb von $ this- & gt; layout () - & gt; content.
Nun möchte ich die Ansichten von verschiedenen Controller-Aktionen im Layout rendern. Also erstelle ich eine neue Controller-Auth mit einem Action-Login, der ein Login-Formular anzeigt.
Ich ändere mein Layout zu:
%Vor%Wenn ich zu index / index navigiere, möchte ich in dieser Aktion definieren, dass zend auth / login view innerhalb von $ this- & gt; layout () - & gt; login und zum Beispiel news / list innerhalb von $ this- & gt; Layout () - & gt; Inhalt.
index / index ist dann eine Art Seitenlayout - und auth / login und news / list eine Art Widget
Wie geht das?
Der erste Tipp ist, den Action-View-Helfer um jeden Preis zu meiden, er wird wahrscheinlich sowieso in ZF 2.0 entfernt. ( ZF-5840 ) ( Warum der Actionstack böse ist )
Dies steht im Zusammenhang mit einer Frage, die ich gestellt habe - und mit Bittarmans Antwort ist ziemlich nützlich. Der beste Weg, um so etwas zu implementieren, ist ein View-Helfer, der Ihren "Login" -Bereich generieren kann. My_View_Helper_Login
zum Beispiel. Dann kann Ihr Layout $this->login()
aufrufen, ebenso das View-Skript für user/login
. Wenn% index/index
den Inhalt von news/list
rendert, leiten Sie die Anfrage einfach vom Controller an den anderen Controller / die andere Aktion weiter. $this->_forward('list', 'news');
Ich würde auch davon abraten, die action view helper
zu verwenden. Wenn Sie nicht über eine Menge Logik in Ihrem Controller verfügen, müssen Sie wahrscheinlich keine weitere Anfrage an einen anderen Controller senden, nur um eine Ansicht teilweise zu rendern.
Ich würde empfehlen, einfach eine Teilansicht zu verwenden, genau wie Sie es mit Ihrem header.phtml
und footer.phtml
gemacht haben:
Und vielleicht sieht Ihr auth/login.phtml
view Skript so aus:
Solange Sie Ihre Ansichtsvariablen zu einem bestimmten Zeitpunkt in Ihrem Controller setzen, können Sie render view helper
innerhalb einer Ansicht aufrufen (oder sogar einen Controller, falls Sie das möchten).
Ich bin auf diese Seite gekommen, als ich nach einer Antwort auf mein Problem suchte, nämlich dass mein Layout mehrfach aufgerufen wurde. Dies ist auf mehrere Gründe zurückzuführen:
1) Ich machte einen schlechten Ajax-Anruf, hatte / help anstelle von / modul / help
2) Ich habe eine Aktion aufgerufen, exampleAction (), ich musste ein
setzen %Vor%Um zu verhindern, dass das Layout erneut gerendert wird.
3) Ich habe eine Umleitung gemacht, versuche eine Weiterleitung oder Route zu verwenden.
Tags und Links zend-framework zend-view