0

ZF 2를 처음 사용하고 있으며 모듈의 뷰 디렉토리 외부에서 일반 레이아웃을 렌더링하려고합니다.Zend 2 challenge : 모듈 외부에서 일반 템플릿을 유지하기 위해 Zend Framework 2를 구성하는 방법은 무엇입니까?

현재 "카테고리"및 "카테고리 \보기 \ 제네릭 \"의 모듈을 가지고 있습니다. 즉, 머리글 (메뉴 포함), 바닥 글, 머리글 (CSS/javascript 포함))) 다른 모듈에 사용할 수 있도록 스크린 샷을 참조하십시오. enter image description here

각 모듈마다 동일한 레이아웃 (머리글, 바닥 글, 메뉴)을 반복하여 만드는 대신에 다음과 같이 만들고 싶습니다. 모든 모듈에서 액세스 할 수있는 레이아웃 /보기 (예 : 사용자, 범주 모듈은 항상 동일한 바닥 글, 헤더를 가져야 함). 내 질문 :

1- 우수 사례로서, 내 일반적인 레이아웃 파일을 프로젝트의 모든 모듈에 액세스 할 수 있도록 배치해야합니까? 일반적으로 일반 레이아웃은 특정 레이아웃 내에 있어야하지 않습니다. 모듈의 view 디렉토리.

2-Where 및 구성 파일을 변경하려면 어떻게해야합니까?

나는 에반의 EdpModuleLayout

(https://github.com/EvanDotPro/EdpModuleLayouts/)

와 재생하려고도

"Set a generic layout for all modules in Zend framework 2"

을 시도하지만 누군가가 안내 수 있다면 성공 할지도 감사하겠습니다 없었습니다 이 점에 관해서 나. 감사합니다.

+0

조회수 : 당신은 당신이 변경/또는 동적으로 필요하면 뷰 관리자의 설정

'template_path_stack' => array( __DIR__ . '/../view', ), 

또는 전자 이벤트에 추가 할 파일을보기위한

다른 디렉토리를 정의 기본적으로 모든 모듈에서 액세스 할 수 있으므로 특별한 작업을 수행 할 필요가 없습니다. 현재 어떤 오류가 있습니까? –

+0

뷰가 액세스 가능하지만 특정 모듈의 범위 밖에있는 일반 레이아웃을위한 별도의 리포지토리를 만들고 싶습니다. 가능합니까? –

+2

물론 일반보기/레이아웃 만 포함하는 별도의 모듈을 만드십시오. –

답변

1

ZF2에는 이미 모든 모듈에 대한 일반 공유 레이아웃이 있습니다. 기본값은 layout/layout.phtml입니다. 이 파일을 응용 프로그램 모듈보기 디렉토리에두면 모든 모듈에 대해 공유됩니다.

$viewModel->setTemplate('[module namespace]/[controller]/[action]'); 
:

$viewModel->setTemplate('application/index/index'); 

이 기본 값은 다음과 같습니다

로드 된 모든 모듈의 모든보기 스크립트

가 다른 모듈에서 사용할 수있는, u는 그냥보기 모델의 템플릿 경로를 제공해야

하지만 템플릿 경로를 수동으로 제공하면 등록 된보기 디렉토리에서 아무 것도 될 수 있습니다.

'view_manager' => array(
     'display_not_found_reason' => true, 
     'doctype' => 'HTML5', 
     'not_found_template' => 'error/404', 
     'exception_template' => 'error/index', 
//  'layout' => 'layout/layout.phtml',//<---------------------------- 
     'template_path_stack' => array(
      __DIR__ . '/../view', 
     ), 
     'strategies' => array(
      'ViewJsonStrategy', 
     ), 
    ), 

또는 컨트롤러 자체에 :

당신은 또한 뷰 관리자 설정의 기본 레이아웃 파일의 경로를 변경할 수 있습니다

$this->layout('layout/layout.phtml'); 

또는 이벤트에

당신은 동적해야합니다.

$templatePathResolver = $this->getServiceLocator()->get('Zend\View\Resolver\TemplatePathStack'); 
    $templatePathResolver->setOptions(
     array(
      'script_paths' => array(
       $client_theme_path, 
      ) 
     ) 
    );