Zend Framework 12: La importancia de $this->render() y $this->partial() en layout.phtml y las vistas
Esta es la parte número doce de mi tutorial de Zend Framework. La parte anterior está aquí.Como vimos en un tutorial anterior, si en ZF llamamos al comando
enable layout
entonces creamos una plantilla común para todo el sitio. En esta página podemos colocar el html 'global' del sistema, y en el lugar en donde queramos colocar el html de la vista, hacemos
<?php echo $this->layout()->content; ?>
Y que cualquier variable que le hayamos asignado a la vista, la podemos mostrar con
<?php echo $this->nombreVariable; ?>
Pero pensamos un poco en un sitio más complejo. En ese sitio tenemos una capa (div) con un header, que tiene un logo del sitio.
También tendremos una capa (div) de footer, con enlaces al copyright y contacto del sitio. Y colocaremos una columna al lado derecho donde mostraremos algunos banners de publicidad. El banner publicitario sólo se mostrará en la página de inicio.
Fácilmente podremos poner todo esto en nuestro archivo layout.phtml. Eso sí, el html se volverá algo confuso, entre tanto tag y div mezclado. ¿y cómo lograr que el banner publicitario se muestre solo cuando estemos en la página principal? Pues tendremos que enviar alguna variable desde la vista, podría ser una variable showBanner = true, y preguntar por esa variable en layout.phtml, para decidir si renderizar el banner en la página o no.
Simple, ¿verdad...?
Pues trata de hacer eso con un sitio con un layout complejo, llamadas javascript incluídas, y verás crecer tu archivo a tamaños astronómicos.
¿No habrá una forma de poder incluir trozos de código en layout.phtml? Y pensemos en las vistas (arch .phtml). También pueden crecer demasiado, o repetir código de otras vistas. La pregunta se repite: ¿No habrá una forma de poder incluir trozos de código en mis vistas .phtml?
Pues sí hay: $this->render() y $this->partial(). Estas se usan así:
(imágen sacada de acá)
Como podemos ver, con render("header.phtml"); ?>
el sistema cargará el contenido del archivo header.phtml dentro de layout.phtml, el que puede contener código html, PHP y/o javascript. Lo mismo pasa con render("footer.phtml"); ?>
Estos archivos deben estar guardados en /application/views/scripts, es decir:
/application/views/scripts/header.phtml
/application/views/scripts/footer.phtml
Si llamamos a $this->render("archivo.phtml"), el archivo a renderizar tendrá acceso a todas las variables que recibe layout.phtml desde la vista.
Sin embargo, si llamamos a $this->partial("archivo.phtml"), el archivo a renderizar no tiene acceso a las variables de layout.phtml. Pero nosotros podemos enviarle variables usando el segundo parámetro:
$this->partial("archivo.phtml", array('var1' => 'value 1', 'var2' => 'value 2'));
Se recomienda usar $this->render(), y sólo usar $this->partial() cuando sea necesario enviar nuevas variables al script.phtml.
Ambas funciones se pueden llamar desde layout.phtml o desde dentro de cualquier vista. Pensemos qué significa eso. Todo el código html duplicado podría colocarse dentro de archivos .phtml, y luego definir variables antes de llamar a $this->render(), o enviarselas usando el 2do argumento de $this->partial(). podríamos poner todos los enlaces a los archivos javascript y css que vamos a usar dentro de un script, y luego llamarlo desde layout.phtml usando $this->render(). Nuestro sitio quedará fomrado de peqqueñas partes ensamblables.
Maravilloso ¿verdad?
Palabras finales
Bien, con esto se termina mi tutorial básico-intermedio de Zend Framework.
Una vez que se tiene una idea de cómo hacer un sistema usando el framework, lo mejor es ir al manual de referencia oficial. Contiene mucha información importante acerca de aspectos específicos del sistema. Recomiendo leerlo completo. Yo lo hice, y me ha servido bastante.
Desde acá puedes descargar el proyecto de prueba:
http://www.mediafire.com/?a0zy45x36nbmv6g
Saludos a todos quienes pasen por acá.
Suscribirse a:
Enviar comentarios
(
Atom
)
22 comentarios :
Saludos Hermano, excelente su post, me fue de gran ayuda, seria genial si hace un nuevo articulo con un archivo pdf o .doc de su tutorial...
Excelente, me sirvio de mucho.
Muchas gracias.
Saludos desde uruguay!
Tu tutorial ha estado 10 puntos. Excelente trabajo. Seria genial si te animas a hacer mas de estos o realizar un proyecto mediano usando zend para aprender mas como seria en un caso real. Gracias infinitas!!!
Muchisimas gracias por los agradecimientos (valga la redundancia xd)
De hecho, he estado pensando en hacerme un blog dedicado exclusivamente a la programación, pero ahí veremos :P
Saludos, me alegro que te haya servido :P
Hola! felicidades por tu tutorial del framework Zend, es excelente.
Me encantaria que hicieras una parte integrando Smarty, seria genial o sabes un buen lugar donde pueda encontrar alguno?
Gracias.
Un cordial saludo,
Adriana.
Excelente Ayuda. la Verdad no hallé otro lugar para los que comenzamos en Zf, con en estilo aquí encontrado. Gracias,
Walter.
Excelente el tutorial completo. Me ha servido de mucho. Muchas gracias.
Hola.
Tengo una aplicacion modular, y tengo el problema de que el partial y render, solo me funcionan si el phtml esta en el view/script del modulo.
Pero no puedo acceder desde otros modulos al phtml.
Por lo tanto no me sirve, y estoy ocupando helpers hechos por mi para ese cometido.
Saludos!
Saludos,
Realmente me ayudo bastante este tutorial. Muchas gracias ....
Atte
Alonso
Amigo Angelorum te felicito y te doy mis mas sinceros agradecimientos, es el mejor tutorial que eh encontrado, anduve buscando y rebuscando informacion de cero en ZF y llegue por aqui, como dicen en taringa +10 jajaja, pero bueno, ahora que tengo las bases me dedicare a crear un projecto para mi tesis. Saludos desde Peru.
Gracias por el excelente tutorial, lo realicé de principio a fin... muy claro y preciso. Me ahorraste varios días de investigación... Felicidades. Un fuerte abrazo desde Ecuador.
Buenas gente que tal como estan.
Tengo una duda,enque parte se indica que tiene que utilizar la accion addAction,¿Cual es el codigo que me indica eso?
Agradesco mucho su respuesta.
que tenga un buen dia.
impresionante lo suyo Angelorum, desde hace mucho tiempo, yo digo y creo que el conocimiento no se le niega a nadie, el que lo hace demuestra su "poco" conocimiento. Un aplauzo para usted Angelorum.
Hola excelente tutorial,pero tengo una duda al crear una accion me aparece lo siguiente
Note: PHPUnit is required in order to generate controller test stubs.
Note: The canonical controller name that is used with other providers is "Album"; not "album" as supplied
Creating an action named update inside controller at C:\xampp\htdocs\miproyecto/application/controllers/AlbumController.php
An Error Has Occurred
Provided docblock line is does not contain a valid tag
Zend Framework Command Line Console Tool v1.11.9
Details for action "Create" and provider "Action"
Action
zf create action name controller-name[=Index] view-included[=1] module
He intentado encontrar info ,pero no veo solucion
Gracias
Sí, es un error extraño.
Lo que pasa es que el programa que crea la accion dentro del controlador (zf.bat o zf.sh) al parecer no parsea bien el codigo que ya tienes escrito en el controlador en donde agregarás la nueva acción (update).
Eso pasa cuando tienes muchas lineas de codigo escritas en ese controlador.
Lo que yo hago es cortar todo el código de la clase controladora, entonces creo la acción (update, en este caso) y después vuelvo a pegar el código que antes corté... y funciona.
Estimado
Muchas gracias corte la mayoría de código guarde y después no tuve problemas
De nuevo muchas gracias y felicitaciones por el tutorial
Te felicito por tu tutorial me ha servido de mucho y estoy muy agradecido con ello. Queria pedirte un favor, podrias poner un ejemplo de zend paginator,veras tengo problemas con esto:
te dejo mi codigo,
me muestra la 1ra vez bien los datos con sus respectivos numeros para paguinarse,pero cuando selecciono una paguina (1,2,3) no me muestra resultados y me muestra un error(An error occurred
Application error)
--que estoy haciendo mal,gracias por todo.
-controlador "buscarcanseones":
public function indexAction()
{
if ($this->getRequest()->isPost()){
$buscar = $this->getRequest()->getPost('buscar');
$table = new Application_Model_DbTable_Buscarcanseones();
$productos=$table->BuscarCanseones($buscar);
$page = $this->_getParam('page', 3); // obtenemos la página actual
$registros_pagina = 3;// número de registros a mostrar por página
$rango_paginas = 10; // número máximo de páginas a mostrar en el paginador
$paginador = Zend_Paginator::factory($productos);
$paginador->setItemCountPerPage($registros_pagina)
->setCurrentPageNumber($page)
->setPageRange($rango_paginas);
$this->view->productos = $paginador;
}
}
/////////////////
-en la vista:
/////////////////
productos as $d) :
$this->escape($d->nom_artistas)."";
endforeach;
echo $this->paginationControl($this->productos,'Sliding','buscarcanseones/paguinar.phtml');
?>
///////////////
en paguinar.phtml
///////////////
pagesInRange as $page){
?>
">
GRACIAS POR TODO
Hola Hola gente, todo excelente; excepto un gran problema que aun no he logrado solucionar, se trata del problema de las tildes al momento de editar un registro, Carga cualquier contenido excepto una palabra con tilde o ñ.
He puesto cabeceras meta ...; tambien he probado con charset=utf-8, charset=ISO-8859-1. pero ninguna me funciona :S. Es de suma importancia esto, ojala alguien me pueda ayudar por favor.
No se si hay un setRequired(); o algo que se pueda integrar para que al momento de editar me carge el contenido con "'" y "ñ".
Si a alguien lo gro solucionar este gran inconveniente porfa envieme un email a ANT.INFORMATIC@GMAIL.COM
le estare eternamente agradecido.
gracias y saludos a la comunidad.
EXCELENTE!
Hola, excelente este tutorial, muy claro y da una idea general sobre la filosofia de trabajo de esta util herramienta, Gracias.
Me gustaría que enseñaras Zend con Bootstrap twitter, seria fantastico,
yo no he podido ni siquiera empezar y lo necesito para mañana : p ya me las ingeniare
No he acabado todo el tutorial, pero aún estando en la mitad te doy ya las gracias por dedicar tu tiempo a explicar al personal como funciona el tinglado de Zend.
Muchas gracias, really!
Publicar un comentario