Erweiterung von Zend View Helper -Platzhalter
-
22-09-2019 - |
Frage
Ich las das Handbuch über Grundlegende Nutzung der Platzhalter, und es hat dieses Beispiel:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
// ...
protected function _initSidebar()
{
$this->bootstrap('View');
$view = $this->getResource('View');
$view->placeholder('sidebar')
// "prefix" -> markup to emit once before all items in collection
->setPrefix("<div class=\"sidebar\">\n <div class=\"block\">\n")
// "separator" -> markup to emit between items in a collection
->setSeparator("</div>\n <div class=\"block\">\n")
// "postfix" -> markup to emit once after all items in a collection
->setPostfix("</div>\n</div>");
}
// ...
}
Ich möchte fast genau das erreichen, aber ich möchte der Wiederholung bedingt mehr Klassenwerte hinzufügen div
s zum Zeitpunkt der Renderung, wenn möglich, wenn der gesamte Inhalt im Platzhalter ist. Eine Sache, die ich speziell tun möchte, ist die Klasse von "First" zum ersten Element und "Last" zum letzten Element hinzuzufügen. Ich gehe davon aus, dass ich das erweitern muss Zend_View_Helper_Placeholder
Klasse, um dies zu erreichen.
Lösung
Die Zeichenfolge mit festgelegt mit setSeparator()
wird verwendet, um Elemente in einem Behälter zu implodieren. Stellen Sie es entweder auf eine leere Zeichenfolge ein oder lassen Sie den Anruf einfach von setSeparator()
und fügen Sie die trennenden Divs zusammen mit Ihrem anderen Inhalt ein:
<?php $this->placeholder('sidebar')->captureStart(); ?>
<?php if($userIsAdmin === TRUE) { ?>
<div class="block admin-menu">
<h4>User Administration</h4>
<ul>
<li> ... </li>
<li> ... </li>
</ul>
</div>
<?php } ?>
<div class="block other-stuff">
<h4>Non-Admin Stuff</h4>
<ul>
<li> ... </li>
<li> ... </li>
</ul>
</div>
<?php $this->placeholder('sidebar')->captureEnd() ?>