2011-01-07 3 views
2

젠드 프레임 워크 웹 사이트를 만들었으며 사용자가 모바일 장치에 있는지 여부에 따라 레이아웃 파일을 전환하도록 업데이트하고 있습니다.젠드 레이아웃을 전환하기위한 코드를 넣을 적절한 위치는 어디입니까?

검색을 처리하기 위해 클래스를 작성했지만이 검사를 배치하고 사용되는 레이아웃 파일을 트리거하는 데 가장 적합한 위치를 알 수 없습니다.

코드 :

include(APPLICATION_PATH . "/classes/MobileDetection.php"); 
$detect = new MobileDetect(); 

if ($detect->isMobile()) { 
    $layout = $layout->setLayout('mobile'); 
} 

내가 부트 스트랩 기능 _initViewHelpers()에서 레이아웃을 트리거 할 수 있지만, 나는 위의 줄을 포함 추가로 나는 즉시 500 오류가 발생합니다.

장소 및 위치에 대한 권장 사항은 무엇입니까? 나는 원래 수표를 다루는 도우미가 있지만 레이아웃 파일 자체를 바꾸기보다는 레이아웃 자체에서 사용되었습니다.

답변

2

당신은 플러그인을 사용할 수 있습니다, 그게 내가 할 수있는 작업은 다음과 같습니다

<?php 

class Mobile_Layout_Controller_Plugin_Layout extends Zend_Layout_Controller_Plugin_Layout 
{ 

    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     switch ($request->getModuleName()) { 
      case 'mobile': $this->_moduleChange('mobile'); 
     } 
    } 

    protected function _moduleChange($moduleName) { 
     $this->getLayout()->setLayoutPath(
      dirname(dirname(
       $this->getLayout()->getLayoutPath() 
      )) 
      . DIRECTORY_SEPARATOR . 'layouts/scripts/' . $moduleName 
     ); 
     $this->getLayout()->setLayout($moduleName); 
    } 

} 

내가 library/ProjectName/Layout/Controller/Plugin/Layout.php에 보관합니다. 실제로 저에게이 알아 낸 얻을 수있는 동안을 잡았다

Zend_Layout::startMvc(
    array(
     'layoutPath' => self::$root . '/application/views/layouts/scripts', 
     'layout' => 'layout', 
     'pluginClass' => 'Mobile_Layout_Controller_Plugin_Layout' 
    ) 
); 

,하지만 당신은 그것을 통해 작동하면, 당신은 많은 그래서 될 것입니다 : 당신의 Bootsrap에서

,이 같은 것을 포함해야합니다 더 행복해. 희망이 도움 :

+0

정확히 무슨 일이 일어나는지 확실하지 않습니다. 내 논리가 사전 함수에 들어가서 무슨 getModuleName()이 반환하겠습니까? 부트 스트랩의 pluginClass 뿐인가? – Andrew

0

사실 실제로 무슨 일이 일어나고 실제로 당신이 하나의 새로운 별도의 모듈을 "모바일"이라는 레이아웃 플러그인 도우미는 실제로 이것이 호출 모듈인지 확인 preDispatch() 메소드를하고있다. 그 후 메서드는 레이아웃을 변경합니다. 그것은 꽤 복잡합니다. 실제로 모바일 버전과 init() 메소드에서 $ this-> _ helper-> layout-> changeLayout()으로 레이아웃을 변경하기위한 기본 컨트롤러를 만들 수 있다고 생각합니다.

0

것은 당신이 www.example.com이 있고 모바일 장치로이 페이지를 쳤을 때 당신이 mobile.example.com로 리디렉션 할 상상 : 그 www가 아는 것은 모듈이

및 모바일은의 모듈입니다 나는 모바일 장치 http://framework.zend.com/manual/de/zend.http.user-agent.html#zend.http.user-agent.quick-start

방법 및 리디렉션

을 감지하는 방법에 대한 다음 페이지를 발견

다른 레이아웃과 응용 프로그램?

감사합니다.