동적 런타임에서 컨테이너에 Zend_Navigation 페이지를 추가합니다

스티븐 로이드 Watkin 2010년 1월 7일 (목요일) 오후 10시 50분

대한 Zend_Navigation 게시 계속 내 마지막으로 / 액션 컨트롤러에 사용자 정의로가는 요청에 대해 sitemap.xml에 ,이 게시물은 실행에 대해 스크립트 / 런타임 Zend_Navigation 컨테이너에서 dymnamically 추가 페이지를합니다.

그 모든 잘하거나의 INI에 페이지를 잘 지정하여 XML을 파일에 있지만 사이트에의 페이지를 변경해야하고가는 당신은 어떤 시점 흔적 그 breadcrumb 메뉴 중 당신이 원하는대로 일부 사이트맵 당신에 포함하거나이 있습니다. 그러므로 우리는 런타임에 우리의 Zend_Navigation 컨테이너에 페이지를 추가합니다해야 할 일을. 이것에 대한 예제는 뉴스 항목을 블로그 게시물 또는 페이지 댓글 등의 추가하는 것입니다

이 예에서 나는 설정 내 정적으로 정의의 INI에 몇몇 뉴스 게시물을 추가하는거야. 나의 뉴스 게시물 페이지 구성을 위해서 난 다음과 같은 형식의 배열을 반환하는 클래스를 사용했습니다 :

  달러 (= 배열을 pagesToAdd
   0 =>
     배열 (
       '레이블'=> '가짜 뉴스 기사 # 5 ...',
       '모듈'=> 'www'를,
       '경로'=>에 'www - 지수',
       '액션'=> '보기',
       '컨트롤러'=> '뉴스',
       '매개 변수'=> 배열 (
           '아이디'=> '5 - 가짜 뉴스 층 - 5 ')
     )
   1 =>
     배열 (/ * 기타 페이지 세부 정보 * /),
  ); 

당신이 함수가있는 구성 Zend_Navigation_Page_Mvc에 대한 배열을 만들어 배열을 포함된 배열을 반환했습니다 것을 알 수있다. 따라서, 배열 새로운 Zend_Navigation 페이지 이상 반복하여 설정 배열에서 만들 수 있습니다. 루프의 일부가 올바른 위치에 페이지를 추가하는 것입니다으로서 다음에 할 일은 (를 사용하여 또는 페이지가 대량으로 추가할 수 있습니다 -> addPages () 메서드를).

이렇게하려면, 당신은 어디에 하위 페이지를 추가하기만하면 페이지를 추가하려는 페이지를 찾습니다. 이 경우 내 페이지를 찾으려면 다음 코드를 사용있다 :

  $ 컨테이너 -> findOneBy는 ( '라벨', '최신 뉴스') -> addPage ($ 페이지); 

부트 스트랩에 내 전반적인 탐색 초기화 따라서 다음과 같습니다 :

  / **
      * 최상위 탐색을 처리하는 데 사용
      *
      * @ 반환 Zend_Navigation
      * /
     보호 기능 _initNavigation ()
     {
         $이 -> 부트 스트랩은 ( '레이아웃');
         $ 레이아웃 = $이 -> getResource ( '레이아웃');
         $ 전망 = $ 레이아웃 -> getView ();
         $ config를 = 새로운 Zend_Config_Ini (
             APPLICATION_PATH.  '/ configs / navigation.ini', APPLICATION_ENV);

         $ 컨테이너 = 새로운 Zend_Navigation ($ 설정 -> 기본값);
         / / 이제 지난 25 뉴스 보도를 추가
         $ 뉴스 = 새로운 뉴스 ();
         페이지 $ = $ 뉴스> getNavigationEntries ();
         foreach ($ $ 그대로 페이지 페이지) {
        	 $ 페이지 = 새로운 Zend_Navigation_Page_Mvc ($ 페이지);
        	 $ 컨테이너 -> findOneBy는 ( '라벨', '최신 뉴스') -> addPage ($ 페이지);
         }
         $보기 -> 탐색 ($ 컨테이너);
     } 

추가에 필요한 것은 사용하여 캐싱 (형태의 일부 Zend_Cache 페이지의 각 하중 아마도;)와 함께 꽤 ​​비싼 수)에가는 그렇지 않으면이 있습니다.

6 답변은 "동적 런타임에 Zend_Navigation 컨테이너에 페이지를 추가합니다"로

  1. 미스터 사람은 말합니다 :

    정말 명확한 예를 들어, 고마워 - 그건 찾던 바로 내가 뭘거야. 건배. G 조

  2. A387 말합니다 :

    좋은 게시물! 좀 문제가 부트 스트랩에서 모델 수업을 시작했습니다. 왜 애플 리케이션 / 모델 클래스는 부트 스트랩에서 사용할 수 없습니다 단서? 여러분의 클래스가 호출 '새로운 뉴스 ()'를, 대신 내가 모델 클래스에서 탐색 트리를 지내는 탐색 페이지를 추가하고 싶습니다. 당신은 아이디어가있다면, 내가 알려주시기 바랍니다! ;)

  3. 나의 모델은 게시물 수정되었다 코드의 정확한 이름은 Pro_News되고 자동 로더에 의해 포착됩니다.

    추측이 모듈을 사용하지 않는거야? 하지만 그렇다면 당신의 모델이 호출되어야합니다 (필자는이 시스템을 직접 사용하지 않는) ZF에 대한 _News는 기본적으로 데리러.

    나는 그것이 "/ 모델 응용 프로그램을"이 포함되어 있는지 확인하거나 수동으로 파일을 포함하여 부트 스트랩 메서드에서 경로를 포함 확인하시기 바랍니다 싶어요.

답변을 남겨주세요













파노라마 테마로 Themocracy

6 방문자가 온라인으로 지금
3 인용, 3 봇, 0 회원
오늘 최대 방문자 : 20 4시 58분에서 세계 협정시 오전
이번 달 : 22시 2011년 8월 6일 12:30 세계 협정시 오전
올해 : 130에서 28-03-2011 세계 협정시 오후 10시 40분
전체 시간 : 130시 28-03-2011 세계 협정시 오후 10시 40분