Zend Framework: Rendere mehrere Ansichten in einem Layout

8

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?

    
Michi 21.08.2009, 22:11
quelle

4 Antworten

8

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');

    
gnarf 21.08.2009, 22:55
quelle
3

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:

%Vor%

Und vielleicht sieht Ihr auth/login.phtml view Skript so aus:

%Vor%

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).

%Vor%     
Andrew 15.07.2011 14:55
quelle
1

Sie können die nicht so schnelle performante

verwenden %Vor%

oder Sie versuchen es mit

%Vor%

(siehe Ссылка )

    
Rufinus 21.08.2009 22:25
quelle
0

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.

    
Joris Kok 28.02.2012 10:09
quelle

Tags und Links