public function testRenderScriptToPreviouslyNamedResponseSegment() { $this->request->setModuleName('bar')->setControllerName('index')->setActionName('test'); $controller = new Bar_IndexController($this->request, $this->response, array()); $this->helper->setResponseSegment('foo'); $this->helper->renderScript('index/test.phtml'); $body = $this->response->getBody('foo'); $this->assertContains('Rendered index/test.phtml in bar module', $body); }
/** * This function updates the ViewRender helper to add another view directory * which is located in the templates directory. * * This adds the feature to override view script in certain templates. * * @param string $script * @param string $name * @return void */ public function renderScript($script, $name = null) { $application = $this->getFrontController()->getParam('application'); $module = $this->getModule(); $viewScriptPath = trim($this->view->layout()->getViewScriptPath(), DIRECTORY_SEPARATOR); $scriptPath = $viewScriptPath . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . $application . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . $module . DIRECTORY_SEPARATOR; if (!in_array($scriptPath, $this->view->getScriptPaths())) { $this->view->addScriptPath($scriptPath); } parent::renderScript($script, $name); }
/** * Tries to render a delegate action's default template if it exists. * * Because we can't always know the short name of a delegate (like we can * with a controller), the default view spec of :controller/:action:suffix * won't work for us. This means we can't just prepend our default paths to * the view script paths. Instead, this function changes the viewRenderer * spec to just :action:suffix, puts in the default dirs, tries to render * and then flips back the settings afterwards. * * @todo Ugly, needs refactoring * @param Zend_Controller_Action_Helper_ViewRenderer $viewRenderer * @param Zend_View_Abstract $view * @param string $action Name of the action, without the "Action" suffix */ protected function _renderDefaultScript($viewRenderer, $view, $action) { //No settings? Abort to save cycles $defaultPaths = $this->getDefaultScriptPaths(); if (empty($defaultPaths)) { return; } //Save the old settings $oldSpec = $viewRenderer->getNoController(); $oldPaths = $view->getScriptPaths(); //Set the viewrenderer spec to look inside a flat directory $viewRenderer->setNoController(true); $view->setScriptPath($defaultPaths); $path = $viewRenderer->getViewScript($action); //relative path $fullPath = $view->getScriptPath($path); //absolute path //We use the full path to make sure this template actually exists on //disc but Zend_View will only accept a path relative to a script dir. if (!empty($fullPath) !== false) { $viewRenderer->renderScript($path); } //Reset view settings so we don't botch anything afterwards? $viewRenderer->setNoController($oldSpec); $view->setScriptPath($oldPaths); }