Zend Framework: "mehrere Ansichten in einem Layout
Ich möchte erzeugen eine dynamische Website mit Zend_Layout.
Mein layout (/application/layouts/scripts/layout.phtml) die folgenden Zeilen enthält:
...
<body>
<?php echo $this->render('header.phtml') ?>
<div id="content"><?php echo $this->layout()->content ?></div>
<?php echo $this->render('footer.phtml') ?>
</body>
...
Wenn ich navigieren Sie zu meiner index-controller, index-action - Zend macht die index-Ansicht (application/views/scripts/index/index.phtml) in der $this->layout()->Inhalte automatisch.
Jetzt will ich das Rendern der Ansichten der verschiedenen controller-Aktionen werden im layout.
So Generiere ich einen neuen controller auth mit einer Aktion anmelden, das zeigt ein login-Formular.
Ich mein layout:
...
<body>
<?php echo $this->render('header.phtml') ?>
<div id="content"><?php echo $this->layout()->content ?></div>
<div id="login"><?php echo $this->layout()->login ?></div>
<?php echo $this->render('footer.phtml') ?>
</body>
...
Wenn ich navigieren Sie zu index/index -, die ich definieren möchten, die in dieser Aktion, die von zend sollte machen auth/login-Ansicht in $this->layout()->login und z.B. news/list innerhalb von $this->layout()->content.
index/index ist als eine Art von Seitenlayout -
und auth/login-und-news/Liste eine Art widget
Wie dies zu tun?
- Eigentlich eine andere Frage, was tun Sie lieber den view Helfern oder view-Skripte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste Rat ist zu vermeiden, den Action view Helfer um jeden Preis, wird es wahrscheinlich entfernt in ZF 2.0 sowieso. (ZF-5840) (Warum das actionstack ist böse)
Dies ist im Zusammenhang mit einer Frage, die ich - und bittarman die Antwort ist ziemlich nützlich. Der beste Weg, um etwas umzusetzen, wie das ist, haben einen view helper generieren kann Ihr "login" - Bereich.
My_View_Helper_Login
zum Beispiel. Dann ist Ihr layout aufrufen können$this->login()
, und so kann das view-script füruser/login
. Soweit mitindex/index
Wiedergabe der Inhalte vonnews/list
nur das weiterleiten der Anfrage an den anderen controller/action aus dem controller.$this->_forward('list', 'news');
Ich würde auch empfehlen gegen die Verwendung des
action view helper
. Es sei denn, Sie haben eine Reihe von Logik in Ihrem controller, den Sie wahrscheinlich nicht brauchen, um Versand ein weiterer Antrag an einen anderen controller nur für das Rendern einer Ansicht teilweise.Ich würde dir einfach empfehlen mit einem Blick teilweise wie Sie getan haben, mit Ihrem
header.phtml
undfooter.phtml
:Und vielleicht Ihre
auth/login.phtml
view-Skript sieht wie folgt aus:So lange, wie Sie Ihre anzeigen von Variablen an einem gewissen Punkt in Ihrem controller, können Sie rufen Sie die
render view helper
vom view (oder auch nur ein controller, wenn Sie wollte).Können Sie das nicht, also Geschwindigkeit performant
oder Sie versuchen es mit
(siehe http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.partial )
$this->action()
es ist sehr ineffizient.Bekam ich zu dieser Seite, wenn Sie auf der Suche nach einer Antwort auf mein eigenes problem, nämlich dass mein layout habe mehrmals aufgerufen. Dies geschah, weil aus mehreren Gründen:
1) ich habe eine schlechte ajax-call, hatte /helfen statt /Modul/Hilfe
2) ich rief eine Aktion, exampleAction(), hatte ich, um eine
Um zu verhindern, dass das layout gerendert wird, wieder.
3) habe ich eine Umleitung, versuchen Sie es mit einem vorwärts-oder route.