2010-03-25 8 views
2

내가 매뉴얼에 대한 basic placeholder usage을 읽고 있었다 확장하고,이 예제가 있습니다젠드보기 도우미 자리 표시 자

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>"); 
    } 

    // ... 
} 

나는 거의 정확히를 달성하고 싶다,하지만 내가 조건부 더 클래스 값을 추가 할 가능한 경우 렌더링 할 때 모든 내용이 자리 표시 자에있는 경우 div을 반복합니다. 제가 특별히하고 싶은 한 가지는 첫 번째 요소에 "first"클래스를 추가하고 마지막 요소에 "last"클래스를 추가하는 것입니다. 이 작업을 수행하려면 Zend_View_Helper_Placeholder 클래스를 확장해야한다고 가정합니다.

답변

1

setSeparator()으로 설정된 문자열은 컨테이너의 요소를 암시하는 데 사용됩니다. 어느 빈 문자열로 설정하거나 setSeparator()에 호출을 떠나 다른 콘텐츠와 함께 분리 된 div를 삽입 : 실제로 모든 콘텐츠 인 경우, 가능하면 렌더링 시간에 클래스를 설정하려는

<?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() ?> 
+0

자리 표시 자에. 제가 특별히하고 싶은 한 가지는 첫 번째 요소에 "first"클래스를 추가하고 마지막 요소에 "last"클래스를 추가하는 것입니다. (이러한 요구 사항도 포함하여 질문 업데이트) – Sonny

+0

솔루션을 사용하여 끝났으므로 응답으로 수여합니다. 감사합니다 고든! – Sonny