2013-04-11 2 views
3

나는 현재 젠드 프레임 워크 1.12.3를 사용하여 내 새로운 웹 사이트를 만드는거야 활성화되어 활성 경우 내가 젠드 탐색 싫어하는 것을 보았다 : 어린이 경로가 활성화되면젠드 탐색 - 마크 부모는 아이가

을 (예 : 블로그 단일 게시물, 경로 blog-post), 상위 페이지 (이 경우 경로 blog)를 활성으로 표시하지 않습니다.

여기 내 코드입니다 : (navigation.xml) 명확에서

<blog> 
    <label>BLOG</label> 
    <route>blog</route> 
    <title>BLOG_TITLE</title> 
    <pages> 
     <blog-post> 
      <route>blog-post</route> 
      <visible>false</visible> 
     </blog-article> 
     <blog-category> 
      <route>blog-category</route> 
      <visible>false</visible> 
     </blog-category> 
    </pages> 
</blog> 

, 내가 페이지 blogblog-post 같은 자식 경로가 활성화 된 경우 활성 표시하는 것입니다. 불행히도 서브 페이지를 사용하지 않고는 그렇게하지 않습니다 (나는 원하지 않습니다). 따라서 경로 이름이 blog이고 모든 경로가 blog (예 : blog-post, blog-category, blog-author)으로 시작하는 경우 매우 유용 할 것입니다.

내 메뉴 부분이 빈 드롭 다운 (트위터 부트 스트랩)을 렌더링하기 때문에 서브 페이지를 사용하고 싶지 않습니다. 혼자서 참조 :

Empty dropdown in Zend

+0

왜 ZF2를 사용하지 않습니까? 그것은 새로운 사이트이기 때문에. –

+0

메인 내비게이션 요소에 모듈/컨트롤러를 지정하고 액션을 비워두면 각 하위 항목에 액션이 있습니다. 그것이 당신이 원하는 것을 얻는 방법입니다. 그것은 단지 uri와 함께 작동하지 않습니다. 라우터를 사용해야합니다. –

+0

@MarshallHouse ZF2 네임 스페이스 클래스가 마음에 들지 않습니다. –

답변

5

이미 답변을 받았지만 다른 해결책을 찾았습니다. 마셜에 의해 게시 된 사람이 나를 위해 작동하지 않았기 때문입니다. 내가 내 메뉴에액션/컨트롤러를 사용하고 있지 않기 때문에 내 생각이지만 루트 대신.

내 메뉴 항목은 다음과 같습니다

array(
    'label' => 'cms-nav_users', 
    'access_module' => 'user', 
    'resource' => 'user_admin', 
    'route' => 'admin_user', 
    'pages' => array(
     array(
      'label' => 'cms-nav_companies', 
      'access_module' => 'user', 
      'route' => 'company_admin', 
      'resource' => 'company_admin', 
     ), 
     array(
      'label' => 'cms-nav_users-list', 
      'access_module' => 'company', 
      'route' => 'admin_user', 
      'resource' => 'user_admin', 
     ), 
    ), 
), 

내가 내 자신의 메뉴 템플릿 (부분)을 기반으로 솔루션을 함께했다. 기본적으로 하위 페이지 중 하나가 활성화되어있는 경우가있는 경우 확인하는 foreach 루프가 - 활성으로 표시 부모는 다음과 같습니다 :

$active = false; 

if (!empty($page->pages)) 
{ 
    foreach ($page->pages as $subpage) 
    { 
     if ($subpage->isActive()) $active = true; 
    } 
} 

$html[] = ($active) ? 'class="active"' : ''; 

이 사람이 :) 도움이되기를 바랍니다

UPDATE

Zend_Navigation_Page_Mvc::isActive($recursive = false) 

두 가지 방법을 것입니다 우와 :

사실 나는 소스 코드와 같이 당신이 true 매개 변수 젠드 프레임 워크 자신이 isActive()를 사용할 수 있다는 것을 발견 rk,하지만이 하나 더 솔기.

+0

글쎄 사실 zf1을 사용하지 않고 ZF2를 사용하고 있지만 서브 프레임이 제대로 작동하도록 만들었습니다. 그래서 이걸 승인 해 줘서 고마워! :) –

2

를 문서에서 : 당신이 볼 수 있듯이

array(
    'label' => 'Page 2', 
    'controller' => 'page2', 
    'pages' => array(
     array(
      'label' => 'Page 2.1', 
      'action' => 'page2_1', 
      'controller' => 'page2', 
      'class' => 'special-one', 
      'title' => 'This element has a special class', 
      'active' => true 
     ), 
     array(
      'label' => 'Page 2.2', 
      'action' => 'page2_2', 
      'controller' => 'page2', 
      'class' => 'special-two', 
      'title' => 'This element has a special class too' 
     ) 
    ) 
), 

은 상위 메뉴 항목에 할당 아무런 조치가 없다, 그러나 부모와 자녀가 같은 컨트롤러를 공유 할 수 있습니다. 이것이 하위 페이지의 상위 페이지에서 활성 상태를 유지하는 방법입니다.

+0

채팅에 나를 가입하십시오 http : // chat .stackoverflow.com/rooms/27993/discussion-frederick-marcoux-and-marshall-house하시기 바랍니다. 나는 당신이 ZF 문서보다 더 잘 그들을 anwser에 기꺼이한다면 ZF2에 대한 몇 가지 질문을 가지고! :) –