2011-09-09 3 views
3

로/숨기기 메뉴 항목을 표시 할 수 있습니다 내가 젠드 탐색에 어려움이있다. 여기에 내 첫 번째 질문입니다. 그래서 뭔가 잘못 되었다면 말해주세요. 나는 그것을 바로 잡을 것입니다.어떻게 내가 PHP에서, 젠드 프레임 워크와 함께 일하고 있어요</p> <p>[마지막에 갱신보기] 젠드 프레임 워크

나는 메뉴가 내 메뉴를 포함하는 탐색 XML 파일이 내 응용 프로그램

Home 
Login 
Logout 
Member's Page 

에서 다음과 같이 찾고 있습니다. 또한

<nav> 
<home> 
    <label>Home</label> 
    <uri>/</uri> 
</home> 
<login> 
    <label>Login</label> 
    <uri>/index/login</uri> 
</login> 
<logout> 
    <label>Logout</label> 
    <uri>/index/logout</uri> 
</logout> 
<member> 
    <label>Member's Page</label> 
    <uri>/index/member</uri> 
</member> 
</nav> 

<div class="top-level"> 
<?php 
foreach ($this->container as $page) { 
    if ($page->isVisible()) { 
     if ($page->isActive(true)) { 
      if ($page->isActive(false) 
       )$page->setClass("active"); 
      else 
       $page->setClass("open"); 
      echo $this->navigation()->menu()->htmlify($page); 
//... the same continue for the 3 menu level 

마지막으로, 내 layout.phtml, 나는 메뉴에게 지금은

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

렌더링이이 포함 된 menu.phtml, 내 메뉴는 잘 작동합니다 하지만 내 메뉴에는 로그인 및 로그 아웃이 항상 표시되지 않습니다. 그래서, 내가해야 할 일은 로그인 할 때 로그인을 숨기고 로그 아웃 할 때 로그 아웃을 숨기는 것입니다. 시작했을 때 매우 간단 해 보였지만 여전히 작동하지만 작동하게 만들 수는 없습니다. 로그인 한 사용자에 따라 항목을 숨기거나 표시 할 수있는 방법과 방법을 모르겠습니다. 앞으로 다른 항목을 숨기거나 표시해야하기 때문에 실제로 작동시켜야합니다.

이렇게하는 방법이 있습니까?

감사합니다.

편집 :

나는 현재의 역할과 권한 부여를 위해 젠드 :: 인증 또는 Zend_ACL을 사용하지 않는. 사용자가 로그인했는지 여부를 알고 싶다면 사용자가 로그인 한 경우에만 세션에 토큰이 있습니다. 가능하다면 내 메뉴를 변경하지 않고 작동시키고 싶습니다.

업데이트 :

나는 제안 된 것보다 다른 방식으로 작업하고있었습니다. 정말 깨끗한 방법인지는 모르지만 지금은 그 일을하고 있습니다. 자, 이제 내 XML 탐색 파일은 다음과 같습니다.

<menuAnonymous> 
    <home> 
    <label>Login</label> 
     <uri>/login</uri> 
    </home> 
    </menuAnonymous> 
    <menuLogged> 
    <home> 
     <label>Logout</label> 
     <uri>/Logout</uri> 
    </home> 
    </menuLogged> 

이 두 가지를 내 부트 스트랩에서 이와 같이 초기화합니다.

$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'menuNotLogged');  
$container = new Zend_Navigation($config); 
Zend_Registry::set('main',$container); 

그리고 내 레이아웃에서 내 토큰을보고 그것에 따라 메뉴를 표시합니다. 내가 지금 원하는처럼

if ($tokenValid) { 
    echo $this->navigation()->menu()->render(Zend_Registry::get('main')); 
} else { 
    echo $this->navigation()->menu()->render(Zend_Registry::get('logged')); 
} 

는 그래서 일하고,하지만, 난 여전히 청소기를하고 싶은, 그래서 당신이 날 도와 어떤 제안이 있다면 ... 감사합니다!

답변

1

내가 사용한 솔루션으로 내 질문이 업데이트되었지만 나중에 더 나은 방법을 찾을 수는 있지만 현재로서는이 방법이 유용 할 것입니다. 나는 여기서 해결책을 찾지 못했고, 그래서 나는 내 자신의 질문에 대답하고있다. 당신의 도움을 주셔서 감사합니다 !

1

http://www.zend.com/en/resources/webinars/framework의 "Leveraging Zend_Navigator"웹 세미나를 살펴보십시오. 특정 역할/ACL에 네비게이션을 묶는 방법을 설명합니다.

+0

하지만 ACL을 사용하지 않고 있습니다. 이러한 세부 정보로 내 질문을 수정합니다. 감사합니다. – Fanny

+0

웹 세미나를 살펴보십시오. XML에 몇 가지 추가 정보를 저장하고 네비게이션에 정보를 전달하여 관련 항목 세트를 가져옵니다. 따라서 가짜 역할을 2 개 (익명 사용자 1 명, "로그인 사용자 1 명") 만 만들 수 있으며이를 사용하여 사용 사례에 맞는 메뉴 항목을 표시 할 수 있습니다. – wimvds

+0

늦게 답변 해 죄송합니다. 알림을받지 못했고 다른 작업을하고있었습니다. 나는 그것을 살펴보고, 무엇이 효과가 있는지에 따라 대답을 받아 들일 것이다. 고맙습니다 – Fanny