Как установить другой путь к шаблонам с помощью Zend Framework?

Я нахожу тип устройства с помощью WURFL. Также я написал плагин для установки шаблона для просмотра на мобильных устройствах. Пожалуйста, посмотрите на код ниже.

class ZC_Controller_Plugin_Mobile extends Zend_Controller_Plugin_Abstract 
{
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { 

    $bootstrap  = Zend_Controller_Front::getInstance()->getParam("bootstrap"); 
    $useragent  = $bootstrap->getResource("useragent");     
    $device     = $useragent->getDevice(); 

    Zend_Registry::set("useragent", $useragent);
    Zend_Registry::set("device", $device);

    /**
     * @todo change this to be Mobile 
     */

    //echo $device->getType() . " is the type of device";

    if($device->getType() == "mobile") { 
        /**
         * Set the layout to be mobile, here we make sure we streamline what is loaded
         * so as to not load things that arent needed.
         */
        Zend_Layout::getMvcInstance()->setLayout("mobile");

        /**
         * Here we check to see if a mobile version of the template exists.  if it does then we change the view suffix
         * this allows us to load the mobile view if it exists and the defgault view if it doesnt. 
         */
        $base       = APPLICATION_PATH . "/views/scripts/";
        $mobile     = $base .  $request->getControllerName() . "/" . $request->getActionName() . ".mobile.phtml";

        if(is_readable($mobile)) {
            Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer')->setViewSuffix('mobile.phtml');      
        } 

    }
}

}

Также я создал два шаблона в разделе application/layouts/scripts/ 1.layout.phtml (представление для рабочего стола) 2.mobile.phtml (представление для мобильных устройств). Когда я запускаю индексную страницу, у меня есть представление, основанное на типе устройства. Теперь файловая структура похожа на

application/view/scripts/index/

1.index.phtml 2.index.мобильный.phtml

пока все хорошо, теперь я хочу разделить путь просмотра в зависимости от типа устройства. так что у меня будет путь что-то вроде

application/view/scripts/index/index.phtml (Desktop view)
application/mobile/view/scripts/index/index.phtml (Mobile view)

Это будет лучше при разработке сайта на основе представления.

Пожалуйста, совет по этому поводу.


person mymotherland    schedule 21.03.2012    source источник


Ответы (1)


Вы можете использовать Zend_Action_Helper_ViewRenderer::setViewBasePathSpec()

документация по API

person Thom Wiggers    schedule 21.03.2012
comment
Спасибо, очень полезно, я попробовал $this-›bootstrap = Zend_Controller_Front::getInstance()-›getParam('bootstrap'); $view = $this-›bootstrap-›getResource('view');$view-›setScriptPath(NULL); $view-›setScriptPath(APPLICATION_PATH . '/mobile/views/scripts/');$html = $view-›render($request-›getControllerName() . / . $request-›getActionName() . '.phtml' ); Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer')->setViewBasePathSpec($html); - person mymotherland; 21.03.2012