2011-11-03 2 views
1

현재 동일한 컨트롤러에 액세스 할 수있는 여러 가지 방법이있는 응용 프로그램을 구축 중입니다.Zend_Navigation 상태 재설정

예 : 내 탐색에서

 
Presenters -> access controller user/index with param user_type : presenters 
Attendees -> access controller user/index with param user_type : attendees 

나는 두 경로를 (I 라벨, 읽기를 쉽게하기 위해 모듈 및 ACL 제거) 정의 .INI :

dashboard.pages.presenter.controller = "user" 
dashboard.pages.presenter.action = "index" 

dashboard.pages.presenter.pages.create.controller = "user" 
dashboard.pages.presenter.pages.create.action = "create" 

dashboard.pages.presenter.pages.edit.controller = "user" 
dashboard.pages.presenter.pages.edit.action = "edit" 

dashboard.pages.attendee.controller = "user" 
dashboard.pages.attendee.action = "index" 

dashboard.pages.attendee.pages.create.controller = "user" 
dashboard.pages.attendee.pages.create.action = "create" 

dashboard.pages.attendee.pages.edit.controller = "user" 
dashboard.pages.attendee.pages.edit.action = "edit" 

내가 문제를 내가 참석자 섹션에 갈 때, 표시되는 탐색 경로는 발표자를위한 것입니다. 그것이 의도 한대로 작동하는지 이해하지만 URL param user_type을 기반으로 올바른 "노드"를 활성화하는 방법을 찾고 있습니다. 이 사용

:

$page = $this->view->navigation()->findOneByLabel($label); 
if ($page) { 
    $page->setActive(); 
} 

내가 활성에 페이지를 설정할 수 있었지만, 내가 없음으로 Zend_Navigation 상태를 '리셋'할 수있는 방법을 찾고 있어요.

+1

당신은 항상 사용자를 확장 참석자 새로운 클래스를 만들 수 있습니다. 너는 모든 기능을 얻고 항해자와 놀기의 고통을 제거한다. 더 많은 사용자 정의 기능을 추가 할 수 있습니다. – Ashley

답변

1

내가 이걸 부트 스트랩에 넣고 컨트롤러 플러그인을 복사하면된다. 나는 탐색을보기로 설정하지 않으면 어떤 일이 일어나는지 아직 테스트하지 않았습니다. 그게 더 나은 테스트. 그런데 서로 다른 경로를 사용하는 동일한 페이지를 갖는 것은 서재와 관련하여 좋지 않습니다.

부트 스트랩 :

protected function _initStackoverflow() 
{ 
    $this->bootstrap('frontController'); 
    $frontController = $this->getResource('frontController'); 
    $frontController->registerPlugin(new Altergear_Controller_Plugin_Stackoverflow()); 
} 

컨트롤러 플러그인 :

<?php 
class Altergear_Controller_Plugin_Stackoverflow extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     if(($activeLabel = $this->_request->getUserParam('active')) !== null){ 
      $view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->bootstrap('view')->getResource('view'); 
      foreach($view->navigation()->getPages() as $page) 
      { 
       $page->setActive( strtolower($page->getLabel()) === strtolower($activeLabel)); 
      } 
     } 
    } 
} 
+0

SEO 포인터를 보내 주셔서 감사합니다. 다음 번에 내 differents 사용자를위한 다른 컨트롤러를 만들고 내 코드의 대부분을 비표 면화 할 예정입니다. 반면에 당신의 대답은 내가 얻을 수 있었던 것과 같은 결과를 컨트롤러 내에서가 아니라 플러그인 레벨에서 제공합니다. –

+0

사용자 당 컨트롤러를 구축하지 마십시오. Zend_AUth와 Zend_Acl을 사용하여 stdClass 객체를 ID로 설정하고 userId를 추가합니다. 이것은 내가 momemnt에서 일하는 방식입니다. –

+0

나는 당신의 현상금을 원합니다. 귀하의 질문 중 어떤 부분이 아직 답변되지 않았습니다 : D? –