November 14th, 2011 Category: Curso Zend Framework
45 Comments »

En el video de hoy voy a mostrarles como hacer un join con otras tablas, en nuestro caso tenemos la tabla posts, y la tabla categories, vamos a tratar de crear posts que tengan una categoria asociada y mostrar los post a partir de la categoria por la que filtramos.

Para esto vamos a usar un Join para mostrar los nombres de las categorias a las que esta asociada una noticia, y un helper de la vista para mostrar el listado de categorias dentro de nuestro layout.

Aca les dejo el video

Como material extra pueden leer Zend_Db_Select aca van encontrar todo lo referente a armar querys con Zend Framework

Ver todos los capitulos del curso

Subscribe to me on YouTube

Comentar


45 Responses

ismael33 2011-11-15 07:00:10
Hola Pablo,

estoy tratando de poner todo a punto para empezar un proyecto con ZF, y estoy mirando como utilizar control de versiones.

Cuáles son los pasos a seguir?

Intuyo que son: instalar servidor, subversion, crear proyecto en el servidor svn, crear un proyecto con el mismo nombre en netbeans utilizando el script de ZF.

Estoy en lo cierto? Se me olvida algo?

Gracias Pablo por tu gran trabajo,
ismael

Pablo Morales 2011-11-15 08:41:21
basicamente son esos. Pero te diria que leas mas al respecto, y te recomieno en vez de subversion empezar con git,

Sino te importa que el proyecto sea publlico, hacelo con github.com

ahi te dan todas las herraminetas que necesitas

ismael33 2011-11-20 19:49:45
Sí, al final he optado por git, gracias por el consejo.

Por otra parte, ando algo confuso acerca de Zend-Server. Qué es exactamente? Es como instalar apache, php, xDebuger, phpMyAdmin, ...? Es un todo en uno?

Es mejor instalar MySql-server, apache, PHP, ... y luego instalar Zend-Framework?
o por el contrario
Es mejor instalar Zend-Server?

Pablo Morales 2011-11-20 21:50:28
Si Ismael es un todo en uno. Bajate la Comunnity edition la otra es paga :D

Instala Zend Server y ya tenes Zend Framework en el include path :D

Steven 2011-11-21 15:54:56
Hola Pablo,

Pronto vas a subir la ultima version a github?

Saludos!

Steven S.

stvn20@gmail.com 2011-11-21 17:26:29
Hola Pablo,

Será posible que puedas enseñarnos como manejar post bilingües tambien?

Saludos!


Steven S.

ismael33 2011-11-21 19:12:02
Pablo, poner el Zend Framework en el include path es equivalente a crear un enlace simbólico en nuestro proyecto a la carpeta Zend como explicaste en el primer vídeo?

Steven 2011-11-21 20:12:47
Hola Pablo,

Como obtengo el valor de la variable de $session->locale?

Quiero hacerle un echo desde el IndexController? Como lo hago?

Saludos!

Pablo Morales 2011-11-21 20:21:34
@steven colgue en 5 la tenes en github. Con respecto a los post billingues, tenes que hacer que en el mismo formulario se ingrese doble titulo y doble descripcion. Cada uno para cada lenguaje, e ingresas dos post duplicados uno con id de idioma espaniol y el otro en ingles.

La variable $session->locale la obtenes haciend

$session = new Zend_Session_Namespace('news123');


@Ismael, si es lo mismo :D

Tomas 2011-11-24 08:23:15
Hola Pablo.
Lo primero es agradecerte los video tutoriales.
me han servido de mucha ayuda para empezar con zend framework y empezar a dar forma a un proyecto.

Lo segundo es preguntarte una duda.
el foreach para sacar el listado de categorias lo realizas directamente en el layout.

Mi pregunta es que si se podria realizar el foreach en un phtml en /view y desde el layout llamar o referenciar a ese phtml? y si se puede realizar, tambien agradeceria que me comentases un poco como realizar esa llamada desde el layout.
un saludo y de nuevo muchas gracias.

Pablo Morales 2011-11-24 12:10:43
Si claro. Vos podes hacer lo mismo tanto en view/script/zaraza como en el layout.

Podes crear un helper que te lo renderee


Tambien podes usar la el helper render para incluir algun archivo de la vista.

por ejemplo desde tu layout hacer

render('category/sidebar.list.phtml' ?>

donde estoy esta incluyendo el archivo que esta en application/views/scripts/category/sidebar.list.phtml

Lo ideal seria que llames a un helper.

ismael33 2011-11-30 11:23:00
Pablo, hay alguna manera para que netbeans cree controllers como se hace en Zend Studio donde hay una opción en New -> Zend FrameworkItem? o solo se puede hacer de forma manual?

Pablo Morales 2011-11-30 15:28:15
Si , aca te explican como

http://netbeans.org/kb/docs/php/zend-framework-screencast.html

ismael33 2011-12-01 08:05:58
ah ok, muy buen vídeo. Gracias.

Otra cosa que veo mucho, y no sé exactamente qué es, son los providers y manifests.

Podrías explicar por favor un poco a qué se refieren éstos términos?

fredy 2011-12-11 13:10:59
Hola Pablo Morales, los tutoriales que hiciste los tome muy encuenta en mi proyecto de tesis que estoy desarrollando. la verdad me sirvieron mucho. tienes correo en especifico para poder enviarte la documentacion y enviarte el codigo para que me ayudes a terminarlo. el trabajo solo seria textear y como exportar a pdf con fpdf. El sistema que estoy desarrollando es para "El registro de Accidentes de Transito y Educacion Vial Web."
de Antemano Gracias por los Videos Tutoriales.

fredyx007@gmail.com 2011-12-11 13:20:49
Una Pregunta como haga para llamar una libreria adentro del controlador x. segun vi por internet es require_once='../library/fpdf/fpdf.php';
ya lo intente con estoy y no me funciono o como debe ser la llamada a la libria fpdf que se encuentra dentro de la carpetar library.
Estare esperando tu Respuesta Pablo. Me despido con un Fuerte Abrazo.

Pablo Morales 2011-12-11 14:10:17
@fredy

Zend Framework trae su propio componente para pdf, pero igual si queres incluir un archivo podes hacerlo asi

require_once APPLICATION_PATH . '/../library/fpdf/fpdf.php

Acordate que APPLICATION_PATH es equivalente a la ruta de tu proyecto por ejemplo

/var/www/html/miproyecto + la carpeta application


/var/www/html/miproyecto/application

fredyx007@gmail.com 2011-12-12 14:59:27
te cuento ya me salio la impresion del pdf. lo unico que me falta saber es el siguiente:

tengo la clase asi:
clase (){
function indexAction(){
$hola=1
}
}
y quiero sacarlo la variable $hola afuera de la clase. como hago?
o en otras palabras como hago para pasar una parametro por post o Get a una Clase normal. no asi a las acciones desde la vista de zend.
gracias por ayuda me sirvio de mucho.

Pablo Morales 2011-12-12 19:54:16
Tenes que usar Zend_Registry

POdes usar Zend_Registry::set('mistorage', $mivariable);


y del otro lado hacer


$mivariable = Zend_Registry::get('mistorage');

edgard26 2011-12-19 14:35:25
buenas amigo una consulta soy parte de un equipo de desarrollo web en php de una universidad aqui en peru quisiera saber si puedes capacitarnos en zendframework a todo nuestro equipo.

Pablo Morales 2011-12-19 19:54:51
Edgard agregame a gtalk y hablamos


pablofmorales at gmail.com


Maniana tenemos el hang out, si quieren se anotan a las 21hs Argentina

https://plus.google.com/113488230260400531922

Daniel 2011-12-19 21:10:33
hola tengo una tabla direcciones que tiene un campo id, calle_principal, calle secundaria y numero_casa, ahora en mi form necesito recuperar estos datos
$this->addElement('select','id_direccion',array('label'=>'Calle Principal:','required'=>true));
con esto recupero la calle principal como hago para sacar el campo calle_secundaria y el numero_casa porque al repetir la misma linea se monta y no me salen ambos en el formulario por ayuden es de urge necesito terminar mi tesis jeje

Daniel 2011-12-19 22:09:41
$this->addElement('submit','GUARDAR',array());
DENTRO DEL ARRAY DEL BOTON COMO PUEDO DARLE COLOR UN BORDE Y DEMAS COSAS

Fran 2011-12-21 12:38:35
Muy buenos los screencast, enhorabuena por ellos, son de muchas utilidad para los principiantes (como yo).

Roque Z. 2011-12-22 14:35:48
Hola Maestro Morales, pregunta s/Zend Paginator. He agregado la posibilidad de usar un LIKE en mi query: Supongamos una tabla con nombres. Le mando un LIKE "vacio" (solo con el %) y me lista todo de la A a la Z. Ahora le pido que traiga todo lo que empieza con "T" (p.ej. t%). Supongamos que el rowset resultante muestra en la primer pagina 1-15/35 me indica que hay 2 paginas, y me muestra perfectamente mi primer pagina. Al pedirle la segunda pagina, en lugar de mostrarme el resto del rowset (p.ej. 16 a 31) me devuelve A a Z, como si le hubiese pedido LIKE "%" (sin la "t", sin el subset).
Alguna idea para probar?
Saludos. Gracias.
Roque Z.

fredyx007@gmail.com 2011-12-26 18:55:47
Hola Pablo Morales, Feliz Navidad.
mi pregunta es muy corta.
¿Como hago para trabajar con dos base de datos en una Aplicacion en zend framework?

pablofmorales@gmail.com 2011-12-26 21:10:51
@Roque seguramente cuando le das click en siguiente o en pagina 2 no le estas pasando los parametros de la busqueda chequea que te lo pase por url y no mandes busquedas por post. Siempre por get


@fredy deberias instanciar una conexion con Zend_Db, podes tener una para la db default donde usas el application.ini y la otra cada vez que la necesites podes conectarte usando Zend_Db aca te explican como

http://framework.zend.com/manual/en/zend.db.adapter.html

Heraud 2011-12-28 23:32:45
Super didáctico, Muchas gracias pablo. Un favor, cómo aria un sistema de login único en zend framework. Me explico, lo que quiero hacer es que para entrar al sistema quiero hacer un login, algo así como phpmyadmin para poder realizar acciones. Básicamente esto quero aplicarlo al sistema para administrar un Hotel en que lo hice zend, de ante mano muchas gracias por todo.

Y otra mas que utilizas para grabar el escritorio en ubuntu y tu blog está hecho en zend o no se se parce al diseño que lo haces en VT Gracias.

pablofmorales@gmail.com 2011-12-29 19:22:08
BUenas Heraud,

Para grabar los videos uso ffmpeg desde la consola

y Seguramente el proximo post sea de Registro y login.

Saludos

fredyx007@gmail.com 2012-01-05 18:37:02
Hola Pablo Morales Una consulta, usted puso en su aplicacion.ini la siguiente linea de codigo en caso de que la aplicacion no sea modular.

resources.view.helperPath.Application_View_Helper = APPLICATION_PATH "/views/helpers"

pero si en caso fuer modular tendria que ser de la siguiente manera?

resources.view.helperPath.Application_Module_Admin_View_Helper = APPLICATION_PATH "/modules/admin/views/helpers"

o como tendria que ser? ya que yo estoy trabajando con modulos dentro de application

fredyx007@gmail.com 2012-01-05 18:40:21
una cosa mas como puedo hacer el famoso (Leer Mas..) asi como en joomla. como lo podria hacer en zend. busque mucho no encontre un ejemplo. espero me ayudes. saludos coordiales desde Yacuiba - Bolivia

fredyx007@gmail.com 2012-01-05 18:40:21 2012-02-19 08:34:37
ya le hice el leer mas. gracias de todos modos, haber cuando hay nuevos tutoriales. saludos cooriales a todos.

inviso.chile@gmail.com 2012-02-29 16:05:31
Hola Pablo :

Nuevamente gracias por los videotutoriales que publicas en tu blog.

Tengo una consulta respecto a los selects.

A menudo necesito usar selects, que al momento de realizar un cambio, debo filtrar la informacion de otro select.

Me explico con un ejemplo.

Supongamos tengo un select con las provincias de Argentina, y mas abajo tengo otro de select que no tiene nada. Pero supongamos que en el select elijo "Mendoza". Lo que debería pasar en el segundo select es que me muestre los departamentos de Mendoza, Junín, La Paz, Las Heras, Maipú y un largo número de etceteras.

¿Como puedo hacer eso en ZF?

Saludos y gracias nuevamente.

franpisa911@gmail.com 2012-05-16 19:32:14
Hola Pablo, mirando un poco de esto, http://devzone.zend.com/1240/decorators-with-zend_form/

loq ue quiero es lo siguiente
.....


Nombre






.... la idea es pasarle con zend decorators, la clase al div que contiene al label, como peude ver el nombre claseAAñadir, como lo puedo hacer querido Pablo, Gracias de antemano.

juan_camba@yahoo.com.ar 2012-05-18 09:03:29
Hola gente , como seria la manera correcta de poner dos metodos en el mismo helper, en el ejemplo Pablo creo una que se lama Categories.php con una funcion categories() en su interior la cual llamamos con : $this->categories(), Ahora si quisiera crear otra funcion dentro del mismo helper por ejemplo getCategoriesOrdered(), como hago para llamarlo luego. Como se daran cuenta el ejemplo es similar salvo que en el mismo archivo hay dos funciones en vez de una como hizo Pablo. Saludos!

Pablo Morales 2012-05-18 09:17:48
Con Fluent Interface

$this->categories()->getCategoriesOrdered()

el metodo categories tiene que devolver $this

return $this;

Juan 2012-05-18 10:32:01
ahhh claro, gracias fenomeno

Francisco Pinzon 2012-06-04 16:31:36
Oye pablo, como hago para que desde un controlador se le pueda especificar el action que debe tomar el formulario, me explico
tengo un formulario con una serie de campos, y por lo general los formularios tienen un action="", la idea es que yo por medio del controller le asigne que action va a tomar, por el ese form lo utilizo en diversas aprtes, es como pasarle los label a los elementos del form algo asi como $variableFor->elemento->setLabel(''Label);; pero para el caso del action, como se debe hacer...

Gracias de antemano

Javier 2012-06-06 09:59:42
Hola Pablo, excelente tu blog.. realmente no se encuentra info tan completa y sencilla como aca.
Mi consulta es la siguiente: hay alguna manera de obtener desde Zend el usuario Windows con el que esta logueado el usuario para validarlo mas adelante con el Active Directory? Tengo entendido que solo puedo obtenerlo con un ActiveX pero la idea es usarlo con varios navegadores.
Desde ya te agradezco!

juan 2012-08-08 06:37:36
Hola Pablo. Tengo una duda a ver si me podes ayudar. Tengo que hacer un site en el que cada pagina , no en todas pero si en muchas, el estilo del munu cambia. Me explico: en el indice tengo el menu a la izquierda, debajo el buscador, debajo de este unos banners, etc. Luego el contenido de la pagina a la derecha. en otra pagina. tengo esos elementos a la derecha, y el contenido a la izquierda. y la pregunta cual es la manera correcta de hacer esto con el layout de zend? meto solo el header y el footer en el layout y los menus, contendio y demas en la vista? o cuando se cargue la vista ( o pagina) deseada hago que se cargue un css alternativo, suprimiendo el que esta cargado? Desde ya gracias Maestro, tus tutoriales me sirvieron de mucho, un saludo.

Pablo 2012-08-10 11:55:26
Muchas gracias por todos estos videos tutoriales, están excelentes! :D.

Seria de mucha ayuda también que nos pudieras enseñar como crear un select dependiente tomando los datos desde MySQL.

Saludos :)

Guillermo Buitrago 2012-11-02 17:51:28
buenas tardes
muchas gracias por los video tutoriales mi pregunta es como se puede hacer una consulta que afecte a cuatro tablas que son dependencia area servicio y personal la consulta en sql seria asi

SELECT dependencia.nombre AS `Dependencia` , servicio.nombre AS `Servicio` , area.nombre AS `Area` , personal.nombres AS `Nombres` , personal.apellidos AS `Apellidos`
FROM `dependencia`
INNER JOIN `area` ON dependencia.id_area = area.id
INNER JOIN `servicio` ON dependencia.id_servicio = servicio.id
INNER JOIN `personal` ON dependencia.id_responsable = personal.id

ya puedo hacer la consulta a 2 tablas por el join pero a mas tablas no

$query = $this->select()

->from( array( 'd'=>'dependencia' ), array('*'))

->join(array( 'a' =>'area'), 'd.id_area = a.id',

array('anombre' => 'nombre' ) )

Miguel 2012-11-09 04:47:58
Hola Pablo:

Muchas gracias de nuevo por los tutoriales, son fantásticos.

He seguido el ejemplo para hacer el "menu select" tirando de la base de datos y me funciona perfectamente, pero cuando hago un "editar", me cambia todos los datos menos los de la "select case". He seguido la ejecución y cuando va a hacer el "update" llegan todos los campos perfectamente cambiados, menos este, que siempre tiene el valor que tiene en la BD. ¿Sabrías que podría estar pasando?

Muchas gracias.

Matias Iglesias 2013-05-07 01:10:19
Pablo, estoy siguiendo tu ejemplo para implementarlo en un proyecto pero con zf2. Desde un Form quiero acceder a un modelo que extiende la clase Zend\Db\TableGateway\AbstractTableGateway y cuando instancio este modelo desde el formulario con $data = new modelo() me tira error... No llego a hacer el this->get('control-select')->setValueOptions($data->getAsKeyValue());... Donde la estoy pifiando?

Pablo Morales 2013-05-10 10:50:30
Lo idea es que al formulario le inyectes el modelo desde el constructor para que puedas usarlo.