2010-03-02 2 views
10

Zend_View_Helper_Navigation_Menu의 출력을 변경해야합니다. 수정해야 할 두 가지 기능을 발견했으며 필요한 변경을 수행하는 방법을 알고 있습니다. 내가 모르는 것은 탐색 객체가 Zend 객체 대신 내 뷰 헬퍼를 사용하도록 만드는 방법입니다.Zend Navigation Menu View Helper는 어떻게 확장합니까?

코드 내 클래스 확장을 나타내는 니펫을 :


편집

// file /library/My/View/Helper/Navigation/Menu.php 
class My_View_Helper_Navigation_Menu extends Zend_View_Helper_Navigation_Menu 
{ 
    protected function _renderDeepestMenu(Zend_Navigation_Container $container, 
              $ulClass, 
              $indent, 
              $minDepth, 
              $maxDepth) 
    { 
     // modified code here 
    } 

    protected function _renderMenu(Zend_Navigation_Container $container, 
            $ulClass, 
            $indent, 
            $minDepth, 
            $maxDepth, 
            $onlyActive) 
    { 
     // modified code here 
    } 
} 
내가 <li> 요소의 클래스를 변경하고 EOL 들여 쓰기을 제거 할

명확히 할 수 있습니다. 메뉴보기 스크립트로 그렇게 할 수있는 옵션이 없으므로 확장해야합니다. 내 레이아웃에 메뉴를 렌더링

$navTable = new Default_Model_Site_DbTable_Navigation(); 
$view = $this->getResource('view'); 
$view->navigation(new Zend_Navigation($navTable->getNavigation())); 

: 내 부트 스트랩에서 탐색 객체를 초기화

echo $this->navigation()->menu(); 

솔루션

나는 일을 이름을 변경하여 작업을 얻었다 다음과 같이,하지만 나는 왜 내가 분명하지 않다. _Menu 클래스와 menu() 함수를 오버로드하거나 덮어 쓸 수 없습니다.

  1. 변경 My_View_Helper_Navigation_MyMenu
  2. 에 클래스 이름은 레이아웃의 클래스 (return parent::menu($container);)
  3. 전화 echo $this->navigation()->myMenu();myMenu 기능을 추가

클래스 와이어 프레임 :

// file /library/My/View/Helper/Navigation/MyMenu.php 
class My_View_Helper_Navigation_MyMenu extends Zend_View_Helper_Navigation_Menu 
{ 
    public function myMenu(Zend_Navigation_Container $container = null) 
    { 
     return parent::menu($container); 
    } 

    protected function _renderDeepestMenu(Zend_Navigation_Container $container, 
              $ulClass, 
              $indent, 
              $minDepth, 
              $maxDepth) 
    { 
     // modified code here 
    } 

    protected function _renderMenu(Zend_Navigation_Container $container, 
            $ulClass, 
            $indent, 
            $minDepth, 
            $maxDepth, 
            $onlyActive) 
    { 
     // modified code here 
    } 
} 

답변

3
$view->addHelperPath(
     APPLICATION_ROOT . '/library/MyApp/View/Helper/Navigation', 
     'MyApp_View_Helper_' 
    ); 


echo $this->navigation()->myMenu(); // name of your class 

: Getting Zend_Navigation menu to work with jQuery's Fisheye

편집 내가 솔루션을 본 적이 없다 죄송합니다

, 내가 게시 한 정확히 것입니다.

하지만 왜 이것이 메뉴 클래스의 trully 확장이 아닌가요?

+1

Zend Framework의 다른 상황에서와 같이'menu()'함수와'..._ Menu' 클래스 이름을 다시 사용할 수없는 이유를 모르겠습니다. 다른 이름을 사용해야합니다. – Sonny

+0

해결책으로 솔루션을 받아 들일 예정이지만 뷰 도우미를 확장 할 때 왜 다른 이름을 사용해야하는지 설명하면 걱정하지 않아도됩니다. – Sonny

+0

잘 모르겠습니다 만, Zend 라이브러리에서 먼저 도우미를 찾는 Zend_View_Helper_Navigation -> __ call()/findHelper() 메소드라고 생각합니다. 따라서 메뉴 메서드를 다시 사용하려면 parent :: menu (...)를 호출하면됩니다. –

0

하셨습니까? 그것 당신의 게시물? 내 답변이 지금 귀하의 질문에 전혀 관련이없는 것 같습니다.


변경해야 할 내용이 있으면 쉽게 할 수 있습니다. 지금 귀하의 질문은 약간 혼란 스럽습니다.

가 이미에 내비게이션을 만든 후에보기를 수정한다고 가정했습니다. 만약 당신이 전에 그것을 할 수 있다면, 당신은 그것을 더 쉽게 만듭니다. 이 비트는 일반적으로 이전에 옵션을 변경하기 때문에 약간 혼란 스럽습니다.

// Get the helper navigation 
$navigation = $viewRenderer-> 
         view-> 
         getHelper('navigation') 
         ->menu() 
         ->renderMenu(
        $YOUR_NAVIGATION_OBJECT,         
        array( 'minDepth' => null, 
         'maxDepth' => null, 
         'onlyActiveBranch' => false, 
         'renderParents' => false, 
         // More options here 


        )       

); 

변명 들여 쓰기는, 내가 위에서 $ YOUR_NAVIGATION_OBJECT를 사용하는 거의

공지 사항을 지어 얻기 위해 정말 열심히했다. 페이지에서 둘 이상의 탐색을 사용하는 경우에만이를 사용합니다. 그렇지 않으면 RenderMenu() 대신 Render()를 사용합니다.에서

+0

혼란스러워하는 내 질문에 대한 귀하의 우려를 해결하기 위해 내 게시물을 편집했습니다. 나는 내가 바꿀 필요가 있었던 것을 이미 좁혔다. 나의 원래 질문은 여전히 ​​나타납니다 : "Zend Navigation Menu View Helper를 어떻게 확장합니까?" – Sonny

+0

알겠습니다. 괜찮아. 나는 한번 살펴 보 겠지만, 나는이 것에 대한 답을 알지 못한다. – Layke

1

답변이 필요할 수도있는 누구에게나 더 나은 방법과 의도 된 방식을 찾았습니다.

'Zend_View_Helper_Navigation_HelperAbstract'를 확장 한 사용자 정의보기 도우미를 직접 만들고 탐색보기 도우미의 기본 프록시를 직접 설정해야합니다.

예. 이를 사용하는 것이 가능할 것이라고 할 데

class Admin_View_Helper_NavigationMenu extends 
            Zend_View_Helper_Navigation_HelperAbstract { 

    public function render(\Zend_Navigation_Container $container = null) { 
     return "Hello world!!"; 
    } 

} 

$this->view->navigation()->setDefaultProxy("navigationMenu"); 

은 (는 액션 스택에 추가 될 때 나는, 메뉴 컨트롤러 액션에 기본 프록시를 변경하고) 보기

<?= $this->navigation()->render(); ?> 

참고 : 여전히보기 도우미의 이름을 바꾸어야합니다. 클래스이지만 Zend에서보기 도우미가 작동하는 방식입니다 (이름은 충돌하지 않아야 함).

+0

Zend Framework 1.12로 업데이트하려고 시도했지만 내 탐색이 중단되었습니다. 다시 방문 할 시간이 없지만 해결책을 통해 문제를 해결할 수 있습니다. 감사! – Sonny