2012-04-24 2 views
0

하위 메뉴 렌더링 :이처럼 내 부트 스트랩 I 설정에서젠드 탐색 - 나는 다음과 같은 XML 파일에 내 모든 페이지를 정의

<?xml version="1.0" encoding="UTF-8"?> 
<configdata> 
<nav> 
    <dashboard> 
     <label>Dashboard</label> 
     <module>default</module> 
     <controller>dashboard</controller> 
     <action>index</action> 
     <title>Die Schaltzentrale</title> 
    </dashboard> 
    <user> 
     <label>User</label> 
     <module>default</module> 
     <controller>user</controller> 
     <action>index</action> 
     <title>Verwaltung der Benutzer</title> 

     <userList>     
      <module>default</module> 
      <controller>user</controller> 
      <action>index</action> 
      <label>Userliste anzeigen</label> 
     </userList> 
     <newUser> 
      <label>User anlegen</label> 
      <module>default</module> 
      <controller>user</controller> 
      <action>new</action> 
     </newUser> 
     <editUser> 
      <label>User bearbeiten</label> 
      <module>default</module> 
      <controller>user</controller> 
      <action>edit</action> 
     </editUser> 
    </user> 
</nav> 
</configdata> 

내 탐색 :

protected function _initNavigation() 
    { 
     $this->bootstrap('layout'); 
     $layout = $this->getResource('layout'); 
     $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml','nav'); 
     $view = $layout->getView(); 
     $navigation = new Zend_Navigation($config); 
     $view->navigation($navigation); 
     Zend_Registry::set('Zend_Navigation',$navigation); 
    } 

이 설정이 날 수 있습니다 내 메인 메뉴를 다음 줄로 렌더링하십시오 :

$partial = array('menu.phtml', 'default'); 
$this->navigation()->menu()->setPartial($partial); 
echo $this->navigation()->menu()->render(); 

지금까지 그렇게 좋았습니다. 내 문제는 이제 특정 하위 메뉴를 렌더링하는 것입니다. 사용자 컨트롤러의 모든 동작으로 메뉴를 렌더링하려고한다고 가정 해 봅시다. 나는 다음과 같이 렌더링하려했습니다 :

$page = $this->navigation()->findOneBy('controller','user'); 
echo $this->navigation()->menu()->renderMenu($page); 

출력이 없습니다. 또한 minDepth 또는 maxDepth 옵션을 성공하지 않고 설정하여 출력을 얻으려고했습니다. 누구든지 나를 위해 뒷다리를 가지고 있습니다. 어떻게 작동시킬 수 있습니까?

답변

2

접근 방식이 매우 비슷합니다. 에 findOneBy 라인을 변경 :

$page = $this->navigation()->findOneBy('label','User');

이 사용자 페이지에서 모든 페이지를 가져옵니다.

컨트롤러별로 페이지를 찾을 수 없다고 생각합니다.

[편집]

I 사용자 아래의 '페이지'섹션을 추가하여 XML을 수정했습니다. 이것은 젠드 네비게이션에게 userList, newUser 및 editUser가 사용자의 하위 페이지라는 것을 알려줍니다 :

<?xml version="1.0" encoding="UTF-8"?> 
<configdata> 
<nav> 
    <dashboard> 
     <label>Dashboard</label> 
     <module>default</module> 
     <controller>dashboard</controller> 
     <action>index</action> 
     <title>Die Schaltzentrale</title> 
    </dashboard> 
    <user> 
     <label>User</label> 
     <module>default</module> 
     <controller>user</controller> 
     <action>index</action> 
     <title>Verwaltung der Benutzer</title> 
     <pages> 
      <userList> 
       <module>default</module> 
       <controller>user</controller> 
       <action>index</action> 
       <label>Userliste anzeigen</label> 
      </userList>     
      <newUser> 
       <label>User anlegen</label> 
       <module>default</module> 
       <controller>user</controller> 
       <action>new</action> 
      </newUser> 
      <editUser> 
       <label>User bearbeiten</label> 
       <module>default</module> 
       <controller>user</controller> 
       <action>edit</action> 
      </editUser> 
     </pages> 
    </user> 
</nav> 
</configdata> 
+0

감사합니다. 이 자습서 [link] (http://www.brandonsavage.net/making-zend_navigation-useful/)에서 findOneBy ('컨트롤러') 접근 방식을 발견했습니다. 컨트롤러 대신 레이블을 검색하면 실제로 출력을 얻습니다. 그러나 나는 단지 주 메뉴를 얻는다. Zend가 XML 구조를 올바르게 읽지 못하는 것 같습니다. – Benni

+0

xml이 잘못되었을 수 있습니다. 나는 나의 대답을 업데이트했다. 수정 된 xml을 사용해보십시오. –

+0

귀하의 제안에 따라 결과물을 얻을 수 있습니다. 하지만 여전히 문제가 하나 있습니다. 두 개의 페이지가 더있는 '장치'라는 컨트롤러가 하나 더 있다고 가정 해 봅시다. 이제 내 하위 메뉴를 렌더링하면 깊이가 1 인 모든 페이지가 포함 된 메뉴가 나타납니다. 그러나 특정 컨트롤러에 의해 분리되지는 않습니다. 그래서 나는 특정 라벨을 검색하지만 사용자와 장치의 모든 링크가있는 메뉴를 얻습니다. 내 XML에는 여전히 문제가있는 것으로 보인다. – Benni