Foros del Web » Programando para Internet » PHP » Zend »

Renderizar un script de otro modulo

Estas en el tema de Renderizar un script de otro modulo en el foro de Zend en Foros del Web. Que tal nuevamente. Se me ha sido necesaria utilizar un script listado.phtml que esta especificamente en otro modulo y obviamente en otro view de un ...
  #1 (permalink)  
Antiguo 02/03/2011, 17:35
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Renderizar un script de otro modulo

Que tal nuevamente.

Se me ha sido necesaria utilizar un script listado.phtml que esta especificamente en otro modulo y obviamente en otro view de un controlador.

Se que cuando se utiliza el render() solo utiliza del modulo actual.

¿Como hago para renderizar un script diferente a mi modulo actual?

Saludos...
  #2 (permalink)  
Antiguo 02/03/2011, 17:49
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Renderizar un script de otro modulo

Podes utilizar renderScript y especificarle el path exacto a la vista, o sino en la vista utilizar partial que te permite especificarle el modulo.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 02/03/2011, 17:53
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Respuesta: Renderizar un script de otro modulo

Hola masterpuppet, gracias por la respuesta tan pronta, lo voy a probar
Saludos...
  #4 (permalink)  
Antiguo 02/03/2011, 18:18
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Respuesta: Renderizar un script de otro modulo

No consigo lograrlo, te pido que me ayudes:
En el controller puse
Código PHP:
...
public function 
usuarioAction()
    {
        
$this->renderScript("/admin/views/scripts/usuarios/crear.phtml");
    }
... 

Última edición por RALlave; 02/03/2011 a las 18:28
  #5 (permalink)  
Antiguo 02/03/2011, 19:05
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Renderizar un script de otro modulo

Si no funciona vas a tener que agregar el basepath manualmente,
Código PHP:
Ver original
  1. public function usuarioAction()
  2. {
  3.     $this->view->addBasePath(APPLICATION_PATH . '/modules/admin/views');
  4.     $this->renderScript("/admin/views/scripts/usuarios/crear.phtml");
  5. }
la verdad bastante desagradable la solución, creo que seria mas elegante crearse un view helper o action helper dependiendo de lo que estes haciendo.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 02/03/2011, 20:08
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Respuesta: Renderizar un script de otro modulo

Hasta ahora nada.
Me da el siguiente error:

Fatal error: Uncaught exception 'Zend_View_Exception' with message 'script '/modules/admin/views/scripts/usuarios/crear.phtml' not found in path (C:\xampp\htdocs\mega\application\modules\admin\vi ews\scripts\;C:\xampp\htdocs\mega\application\modu les\gestor\views\scripts\;.\views\scripts\)' in C:\xampp\php\PEAR\Zend\View\Abstract.php:924 Stack trace: #0 C:\xampp\php\PEAR\Zend\View\Abstract.php(827): Zend_View_Abstract->_script('/modules/admin/...') #1 C:\xampp\php\PEAR\Zend\Controller\Action\Helper\Vi ewRenderer.php(903): Zend_View_Abstract->render('/modules/admin/...') #2 C:\xampp\php\PEAR\Zend\Controller\Action.php(243): Zend_Controller_Action_Helper_ViewRenderer->renderScript('/modules/admin/...', NULL) #3 C:\xampp\htdocs\mega\application\modules\gestor\co ntrollers\IndexController.php(16): Zend_Controller_Action->renderScript('/modules/admin/...') #4 C:\xampp\php\PEAR\Zend\Controller\Action.php(513): Gestor_IndexController->usuarioAction() #5 C:\xampp\php\PEAR\Zend\Controller\Dispatcher\Stand ard.php(289): Zend_Controller_ in C:\xampp\php\PEAR\Zend\View\Abstract.php on line 924
  #7 (permalink)  
Antiguo 03/03/2011, 02:02
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Renderizar un script de otro modulo

Perdón, por copiar y pegar puse mal la ruta de renderScript, seria algo así:

Código PHP:
Ver original
  1. public function usuarioAction()
  2. {
  3.     $this->view->addBasePath(APPLICATION_PATH . '/modules/admin/views');
  4.     $this->renderScript('usuarios/crear.phtml');
  5. }
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 03/03/2011, 06:10
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Respuesta: Renderizar un script de otro modulo

Buenos días masterpuppet, ya esta, gracias por la ayuda.
¿Será necesario adicionar lo siguiente en cada llamada a un view?¿Por que ocurre eso?

$this->view->addBasePath(APPLICATION_PATH . '/modules/admin/views');

Tendre que hacer un Helper y colocarlo en un predispatch
Saludos...
  #9 (permalink)  
Antiguo 03/03/2011, 14:30
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Respuesta: Renderizar un script de otro modulo

Que tal buenas tardes, les pido ayuda en lo siguiente:

tengo ya el action helper hecho creo, pero aún no me funciona, sería alguien tan gentil de decirme donde estoy cometiendo errores gracias:

Código PHP:
class My_Controller_Action_Helper_RenderPropio extends Zend_Controller_Action_Helper_Abstract {
    
//put your code here
    
function direct($module$controller$action)
    {
        
$view = new Zend_View();
        
$view->addBasePath(APPLICATION_PATH '/modules/' $module '/views');

        
$action = new Zend_Controller_Action_Helper_ViewRenderer();
        
$action->renderScript($controller '/' $action '.phtml');
    }
}
?> 
y en el controlador lo llama así:
Código PHP:
public function usuarioAction()
    {
        
$this->_helper->RenderPropio("admin""usuarios""crear");
    } 
tambien ya lo tengo registrado en el Bootstrap.

SALUDOS Y DE ANTE MANO GRACIAS...
  #10 (permalink)  
Antiguo 03/03/2011, 14:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Renderizar un script de otro modulo

No tienes que hacer la llamada directo sobre $view y regresar el resultado??

Saludos.
  #11 (permalink)  
Antiguo 03/03/2011, 14:35
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Respuesta: Renderizar un script de otro modulo

Buenas GatorV
Te refieres al renderScript ?? de llamarlo directo en el controller ??
  #12 (permalink)  
Antiguo 03/03/2011, 15:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Renderizar un script de otro modulo

Me refiero a esto:
Código PHP:
Ver original
  1. function direct($module, $controller, $action)
  2.     {
  3.         $view = new Zend_View();
  4.         $view->addBasePath(APPLICATION_PATH . '/modules/' . $module . '/views');
  5.         return $view->renderScript($controller . '/' . $action . '.phtml');
  6.     }

Saludos.
  #13 (permalink)  
Antiguo 03/03/2011, 16:34
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Respuesta: Renderizar un script de otro modulo

Gracias GatorV, ando perdido un poquitin, pero ahora me da el siguiente error:

Fatal error: Uncaught exception 'Zend_Loader_PluginLoader_Exception' with message 'Plugin by name 'RenderScript' was not found in the registry; used paths: Zend_View_Helper_: Zend/View/Helper/;C:\xampp\htdocs\mega\application/modules/admin/views\helpers/' in C:\xampp\php\PEAR\Zend\Loader\PluginLoader.php:406 Stack trace: #0 C:\xampp\php\PEAR\Zend\View\Abstract.php(1116): Zend_Loader_PluginLoader->load('RenderScript') #1 C:\xampp\php\PEAR\Zend\View\Abstract.php(567): Zend_View_Abstract->_getPlugin('helper', 'renderScript') #2 C:\xampp\php\PEAR\Zend\View\Abstract.php(334): Zend_View_Abstract->getHelper('renderScript') #3 [internal function]: Zend_View_Abstract->__call('renderScript', Array) #4 C:\xampp\htdocs\mega\library\my\controller\action\ helper\RenderPropio.php(18): Zend_View->renderScript('usuarios/crear....') #5 [internal function]: My_Controller_Action_Helper_RenderPropio->direct('admin', 'usuarios', 'crear') #6 C:\xampp\php\PEAR\Zend\Controller\Action\HelperBro ker.php(328): call_user_func_array(Array, Array) #7 [in in C:\xampp\php\PEAR\Zend\Loader\PluginLoader.php on line 406

en mi bootstrap

protected function _initHelpers()
{
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelp er('ViewRenderer');
$viewRenderer->view->addHelperPath('My/View/Helper/','My_View_Helper_');

Zend_Controller_Action_HelperBroker::addPrefix("My _Controller_Action_Helper");
}
  #14 (permalink)  
Antiguo 03/03/2011, 16:50
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Renderizar un script de otro modulo

renderScript pertenece a ViewRenderer, debería ser así:

Código PHP:
Ver original
  1. public function direct($module, $controller, $action)
  2. {
  3.     $view = new Zend_View();
  4.     $view->addBasePath(APPLICATION_PATH . '/modules/' . $module . '/views');
  5.     $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
  6.     return $viewRenderer->renderScript($controller . '/' . $action . '.phtml');
  7. }

igual no entiendo algo, porque no te sirve partial ?

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #15 (permalink)  
Antiguo 03/03/2011, 17:19
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Respuesta: Renderizar un script de otro modulo

hola masterpuppet

coloque en usaurio.phtml

<?php $this->partial("/admin/views/scripts/usuarios/crear.phtml"); ?>

y me da el error, al parecer al igual que renderScript no cuentra a usuarios.phtml

Fatal error: Uncaught exception 'Zend_View_Exception' with message 'script '/admin/views/scripts/usuarios.phtml' not found in path (C:\xampp\htdocs\mega\application\modules\gestor\v iews\scripts\;.\views\scripts\)' in C:\xampp\php\PEAR\Zend\View\Abstract.php:924 Stack trace: #0 C:\xampp\php\PEAR\Zend\View\Abstract.php(827): Zend_View_Abstract->_script('/admin/views/sc...') #1 C:\xampp\php\PEAR\Zend\View\Helper\Partial.php(103 ): Zend_View_Abstract->render('/admin/views/sc...') #2 [internal function]: Zend_View_Helper_Partial->partial('/admin/views/sc...') #3 C:\xampp\php\PEAR\Zend\View\Abstract.php(340): call_user_func_array(Array, Array) #4 [internal function]: Zend_View_Abstract->__call('partial', Array) #5 C:\xampp\htdocs\mega\application\modules\gestor\vi ews\scripts\index\usuario.phtml(1): Zend_View->partial('/admin/views/sc...') #6 C:\xampp\php\PEAR\Zend\View.php(108): include('C:\xampp\htdocs...') #7 C:\xampp\php\PEAR\Zend\View\Abstract.php(831): Zend_View->_run('C:\xampp\htdocs...') #8 C:\xampp\php\PEAR\Zend\Controll in C:\xampp\php\PEAR\Zend\View\Abstract.php on line 924

En cuanto lo que me dijiste anteriormente, tampoco me resulta, no se que hacer. La idea es reultilizar el view usuarios.phtml que se encuentra en otro module, en el cual hay un form de registro de usuarios

Fatal error: Uncaught exception 'Zend_View_Exception' with message 'script 'usuarios/crear.phtml' not found in path (C:\xampp\htdocs\mega\application\modules\gestor\v iews\scripts\;.\views\scripts\)' in C:\xampp\php\PEAR\Zend\View\Abstract.php:924 Stack trace: #0 C:\xampp\php\PEAR\Zend\View\Abstract.php(827): Zend_View_Abstract->_script('usuarios/crear....') #1 C:\xampp\php\PEAR\Zend\Controller\Action\Helper\Vi ewRenderer.php(903): Zend_View_Abstract->render('usuarios/crear....') #2 C:\xampp\htdocs\mega\library\my\controller\action\ helper\RenderPropio.php(19): Zend_Controller_Action_Helper_ViewRenderer->renderScript('usuarios/crear....') #3 [internal function]: My_Controller_Action_Helper_RenderPropio->direct('admin', 'usuarios', 'crear') #4 C:\xampp\php\PEAR\Zend\Controller\Action\HelperBro ker.php(328): call_user_func_array(Array, Array) #5 [internal function]: Zend_Controller_Action_HelperBroker->__call('RenderPropio', Array) #6 C:\xampp\htdocs\mega\application\modules\gestor\co ntrollers\IndexController.php(17): Zend_Cont in C:\xampp\php\PEAR\Zend\View\Abstract.php on line 924

Saludos...
  #16 (permalink)  
Antiguo 03/03/2011, 17:29
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Renderizar un script de otro modulo

Hay que leer el manual,

Código PHP:
Ver original
  1. //usuario.phtml
  2. <?php echo $this->partial('usuarios/create.phtml', 'admin'); ?>

y en cuanto a viewrenderer el problema es que sigue faltando el path del admin.
__________________
http://es.phptherightway.com/
thats us riders :)
  #17 (permalink)  
Antiguo 03/03/2011, 17:40
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Respuesta: Renderizar un script de otro modulo

Gracias una vez mas masterpuppet, lo de leer el manual, tienes razón, funciona por fin. Lo malo con el partial a mi parecer se debe crear si o si el view correspondiente al controller, pero como todo debe tener su objetivo; por el momento ire trabajando con esta solución. Mas adelante seguire intentando con lo del action helper.

Saludos...
  #18 (permalink)  
Antiguo 03/03/2011, 17:51
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Renderizar un script de otro modulo

No entiendo muy bien a que te referis con crear el view, igual te comento que partial hace lo que estas intentando hacer en tu helper, con la diferencia que llama a render de Zend_View,

Código PHP:
Ver original
  1. public function direct($module, $controller, $action)
  2. {
  3.     $view = new Zend_View();
  4.     $view->addBasePath(APPLICATION_PATH . '/modules/' . $module . '/views');
  5.     return $view->render($controller . '/' . $action . '.phtml');
  6. }
__________________
http://es.phptherightway.com/
thats us riders :)
  #19 (permalink)  
Antiguo 03/03/2011, 18:16
 
Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años
Puntos: 2
Respuesta: Renderizar un script de otro modulo

Me refiero a lo siguiente:

Cuando vamos a ejecutar un controller:

Código PHP:
public function usuarioAction()
{
 
$this->render();

render busca a usuario.phtml, verdad??

por otra parte, si en el mismo método del controller llamo con el render() a datos.phtml, se ejecuta sin problemas el método sin que exista el script usuario.phtml, verdad??

Código PHP:
public function usuarioAction()
{
 
$this->render("datos");

Lo cual no ocurria con el partial (supongo), tuve que crear el script correspondiente al método (usuario.phtml), esto por que tengo que escribir dentro de usuario.phtml lo siguiente:

<?php echo $this->partial('usuarios/create.phtml', 'admin'); ?>

saludos ...
  #20 (permalink)  
Antiguo 04/03/2011, 10:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Renderizar un script de otro modulo

En ese caso sí convendría que hicieras tu helper y que deshabilitaras el render por default ($viewRenderer->setNoRender()) y hacer el render de tu clase que necesitas.

Saludos.
  #21 (permalink)  
Antiguo 04/03/2011, 14:57
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 6 meses
Puntos: 60
Respuesta: Renderizar un script de otro modulo

Si es un menu general que va a a parecer en todos lados, ¿no te convendria renderizarlo en el layout?
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador

Etiquetas: frameworks-y-php-orientado-a-objetos, modulo, renderizar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:54.