2011-10-06 22 views
9

Estoy usando varios módulos y un controlador principal para mantener la coherencia.Zend Framework Renderizar vista diferente dentro del módulo/controlador

Mi controlador principal tiene una serie de acciones comunes a las que cada uno de los controladores secundarios posteriores debe tener acceso. Me resulta difícil hacer que esta acción predeterminada represente una vista correcta.

NO quiero tener que agregar la misma vista a cada uno de mis módulos (eso vencería al objeto) pero me gustaría tener una vista predeterminada en alguna parte.

que he intentado:

$this->_forward('commonaction', 'baselayout', 'default'); 

Esto no funciona para mí - ya que trata de procesar la acción otra vez - cuando ya he pobladas las variables necesarias dentro de mi controlador de matriz.

Cualquier ayuda sería asombrosa.

ACTUALIZACIÓN:

Para aclarar quiero ser capaz de utilizar una visión común de un módulo diferente. Todos los ejemplos y soluciones actualmente suponen un módulo común. Esto no funciona para mí.

+0

He actualizado mi respuesta. Aurelio estaba en el camino correcto, pero se requiere establecer la ruta del script para usar el script de vista fuera del módulo actual. –

Respuesta

5

Utilice esta declaración en su controlador:

// Render 'foo' instead of current action script 
$this->_helper->viewRenderer('foo'); 

// render form.phtml to the 'html' response segment, without using a 
// controller view script subdirectory: 
$this->_helper->viewRenderer('form', 'html', true); 

del documento oficial http://framework.zend.com/manual/en/zend.controller.actionhelpers.html

No es posible (al mejor de mi conocimiento) para mostrar la vista de módulo diferente. Además, no hay rastro de esta pregunta en el documento oficial.

+0

Hola Aurelio: gracias, el principal problema con esta solución es que todavía busca la vista dentro del mismo módulo en el que me encuentro actualmente.Cuál está mal. Necesito poder decir que quiero ver la vista X representada en el Módulo Y. – Andy

+0

Lo siento. Entendí el mismo módulo pero diferente controlador. –

+0

ah ok mi mal. actualizaré mi pregunta en consecuencia. ¿Sabes si es posible? – Andy

7

me fijo mediante el uso de:

$this->_helper->viewRenderer->renderBySpec('foo', array('module' => 'modulename', 'controller' => 'controllername')); 
+1

no acepta el valor 'módulo', Zend 1.12 – Herokiller

-1

Puede probar (Zend Doc):

$View = new Zend_View(); 
$View->addScriptPath('/path/to/script'); 
+0

Esto realmente no es lo que OP está pidiendo. Establecer la ruta del script no representa una vista diferente. –

2

Al igual que usted, tengo varios módulos y quería dar una visión arbitraria (que reside en un módulo) en el controlador de un módulo diferente.

Esta era la única manera que podía conseguir que funcione, después de probar muchos enfoques: acción

controlador:

public function xyzAction() 
{ 
    $this->_helper->layout->disableLayout(); 
    $view = new Zend_View(); 
    $view->setScriptPath(APPLICATION_PATH . '/modules/moduleB/views/scripts/abcBlahBlah'); 
    echo $view->render('yadaYada.phtml'); 
    exit; 
} 
2

Pruebe lo siguiente en su acción:

  • Primera especifica la ruta al módulo donde está almacenada la secuencia de comandos de vista
  • Luego especifica el nombre del script de vista en el representador de vista

Véase el siguiente código:

// Add a script path to the directory in the other module 
$this->view->addScriptPath(APPLICATION_PATH . '/modules/baselayout/views/scripts'); 
// Tell the viewRenderer to use the view script 'scriptname' 
$this->_helper->viewRenderer('scriptname'); 
Cuestiones relacionadas