Zend перезаписывает объект просмотра по умолчанию

#zend-framework #view #bootstrapping #viewrendering

#zend-framework #Вид #начальная загрузка #изменение вида

Вопрос:

Как я могу перезаписать объект просмотра по умолчанию в zend Framework, чтобы у меня мог быть пользовательский?

 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
    
    function _initViewHelpers() { 
        $this->bootstrap('view');
        $view = $this->getResource('view');
        $view->doctype('HTML4_STRICT');
        $view->setHelperPath(APPLICATION_PATH . '/helpers', '');        
        $view->headMeta()->appendHttpEquiv('Content-type', 'text/html;charset=utf-8')
                         ->appendName('description', 'Zend Framework');
        $view->headTitle()->setSeparator(' - ');
        $view->headTitle('Zend Custom View');
        $view->setScriptPath(APPLICATION_PATH . '/themes/admin');
        
        return $view;
    }
}
  

Представление по умолчанию содержит путь к сценарию по умолчанию для модуля. Мне нужен один путь для всех модулей, чтобы включить систему шаблонов. setScriptPath Метод должен перезаписать путь по умолчанию, сгенерированный объектом просмотра, но это не так.

 array(2) { [0]=> string(66) "C:/xampp/htdocs/NEOBBS_v6/application/modules/admin/viewsscripts/" [1]=> string(51) "C:xampphtdocsNEOBBS_v6application/themes/admin/" }
  

он состоит из двух scriptPath объектов. Можно ли это сделать, перезаписав объект просмотра по умолчанию?

Ответ №1:

То, что опубликовал Арнери, верно, однако ViewRenderer проверяет, задан ли стандартный путь к скрипту, и добавляет его, если нет. Поскольку пути проверены LIFO, происходит то, что ViewRenderer добавляет стандартный путь после вашего, а затем всегда использует этот.

Что сработало для меня, так это одновременное указание как стандартного, так и моего пользовательского пути, причем пользовательский путь является последним, что-то вроде:

 $view->setScriptPath(array(
    APPLICATION_PATH . '/views/scripts/', // or whatever the standard path is
    APPLICATION_PATH . '/themes/admin'
));
  

однако для этого может быть лучшее решение.

Комментарии:

1. да, код выглядит не очень элегантно, но прямо сейчас он весьма полезен, спасибо Тим

2. Этот ответ помог мне устранить проблему с переопределением помощников просмотра по умолчанию, чего я, похоже, не мог сделать. В итоге я добавил вспомогательные пути zend view по умолчанию в свой application.ini перед своими пользовательскими вспомогательными путями просмотра, и это сделало свое дело! Приветствия 🙂

Ответ №2:

Попробуйте добавить:

         $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
        $viewRenderer->setView($view);
        Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
  

Комментарии:

1. вообще не работает. Похоже, что поведение setScriptPath по умолчанию заключается в добавлении нового значения, а не в перезаписи его

2. попробуйте addScriptPath(), я думаю, используется последний добавленный путь