September 16th, 2011 Category: Curso php5 Programacion Zend Framework
68 Comments »

Con este video concluye la serie inicial de videos. Hoy vamos a ver como Editar, Borrar, y Paginar nuestros datos.

Vamos a ver como manipular un row facilmente, para borrarlo y editarlo. Vamos a usar Zend_Paginator para paginar resultados facilmente con Zend Framework.

Con estos 5 videos ustedes deberian ser capaces de empezar a trabajar con Zend Framework, hay mucho para aprender no se desmoralicen si se traban con algo, nos pasa a todos y todos los dias.

Ahora les dejo para que vean, recuerden verlo en HD.

No se olviden de twitearlo/plusearlo/Facebookearlo :)

Si tienen dudas comenten, estoy archivando toda las dudas que surgen en los comentarios para despues crear mas video a partir de esas inquietudes.

Capitulos Anteriores
Capitulo 1 < Configuracion y creacion del proyecto
Capitulo 2 < Estructura de directorios, MVC y layouts
Capitulo 3 < Objeto view, y contenido estatico
Capitulo 4 < Modelos y Formularios


Invitame una Cerverza


Comentar


68 Responses

LCervantes 2011-09-17 10:59:32
Impresionante tus video. Muy claros y bastante explicativos.
Si estas crando una web publica que se vea la URL, no es ningun problema. PEro en una intranet, donde no interesa que los usuarios modificando la URL accedan a otro registro a parte del que ven, como implementarias la segurodad en la URL.
Se me ocurre encriptar la URL, pero no consigo encontrar información de esto.
Alguna idea.?

Pablo Morales 2011-09-17 11:10:59
Hola @LCervantes.

Con ningun browser vas a poder encriptar la url, es algo que maneja el browser y vos no vas a poder editarlo.

Contame bien que es lo que necesitas y vemos si te puedo dar una mano.

LCervantes 2011-09-17 11:28:57
Hola @Pablo.
Mi idea es mientras estes logado dentro de una zona prrivada, es decir por ejemplo tu ejemplo de noticas (nuevas, actualizaciones y borrados), las url que se ven son del tipo
http://news123.local/posts/update/id/3
la idea seria que las url sean del tipo
http://news123.local/lkajdkjsdkdlkajdlkajdaksdskjald
donde lkajdkjsdkdlkajdlkajdaksdskjald = posts/update/id/3
esto seria url encriptada (los parametros) y que zend entienda donde ha de ir para enseñar la pagina.

Muchas garcias por la contestación.
Saludos

Pablo Morales 2011-09-17 12:17:18
Podes usar Zend_Routes

Este te permite por ejemplo decir que cuando se quiera acceder a la url http://news123.local/lkajdkjsdkdlkajdlkajdaksdskjald busque el controller posts, el action update y el id sea 3
:D

Pero deberias generarlas por cada uno.

Tambien podes asignar reglas, lo que te permite ser un poco mas dinamico.

POr ejemplo

http://news123.local/lkajdkjsdkdl-234-kajdlkajdaksdskjald

vos podes hacer que cada url que empieze con lkajdkjsdkdl corresponde al controller post y las que terminan en kajdlkajdaksdskjald en el action update. Y el parametro del medio puede ser el id, o algun codigo que uses.

Sino vas a tener que hacer el mapeo a mano, o hacerlo algo un poco mas extranio.

Igual con las urls como yo las muestro no tendrias problemas de seguridad. Acordate que la seguridad tiene que ir dentro del codigo, en los parametros que recibis, la url no deberia ser un inconveniente.

Juan 2011-09-30 12:23:13
Hola Pablo, muchas gracias por este curso, podrías seguir con más capítulos desde temas básicos a más avanzados? muchas gracias

Steven 2011-09-30 16:07:51
Hola Pablo!

Increibles videos! He logrado aclarar muchas dudas!

Espero por más videos!

Saludos!

Steven S.

Steven 2011-09-30 16:10:40
Oye pablo podés hacer un video sobre como desarrollar un sitio bilingue?

Saludos!

Steven S.

Pedro 2011-09-30 18:35:16
Muy bueno los tutoriales, teng mucha duda sobre Zend_view en cuanto a crear Helpers y su forma adecuada de usar, por otro lado donde puedo descargar los archivos del tutorial ??

Pedro 2011-09-30 18:50:56
También me interesa eso de un portal bilingue como se reusaria las vistas?? . gracias

Eddy 2011-10-01 08:51:27
muy bueno el tutorial, creo que para base me sirvio excelente!

Pablo Morales 2011-10-01 14:45:54
@juan @eddy Gracias, seguramente el lunes salga el proximo.

@steven @pedro. Me parece buen tema, voy a tratar de armarlo para la semana que viene ;)

andresdzphp 2011-10-23 23:11:49
Hola Pablo, estoy siguiendo tus videos y llegué hasta el quinto porque tengo una duda. ¿Cómo puedo hacer para que me muestre los registros de la base de datos en la vista listar.phtml ya los tengo como nos enseñaste, pero lo que yo quiero es que me salgan en la vista del index.phtml.

Muy interesantes tus videos. Saludos.

Pablo Morales 2011-10-23 23:42:57
Seria algo asi

$this->view->titulo = 'Portal de noticias news123 - Portada';
$postsModel = new Application_Model_Posts();
$this->view->titulares = $postsModel->getAllNew();

En el modelo deberias tener el metodo getAllNew que te trae las noticias, y en la vista haces un foreach para mostrar los titulares, si revisas el codigo en github vas a ver que ya esta implementado

https://github.com/pablofmorales/News123


Saludos.

andresdzphp 2011-10-24 00:14:38
wow haces que todo se vea tan fácil, no sabía que se podía usar un modelo en cualquier controlador. Muchas gracias, me estoy descargando todos tus videos para repasarlos muy bien.

Saludos.

Pablo Morales 2011-10-24 01:15:00
La teoria es que en cualquier controller podes usar los modelos que necesites.

Suerte

@lex 2011-10-29 01:17:00
Excelente Trabajo Pablo, la verdad que eres un gran maestro. Los videos estan bien explicados.
Lo que desearía ahora es saber como agregar Ajax a mis proyectos de Zend Framework. Ya que el ajax me permite no recargar las paginas ; obviamente es muy interesante. Si tienes alguna idea t lo agradeceria muchisimo.

Saludos.

Pablo Morales 2011-10-29 07:32:35
Gracias @alex lo tendre en cuenta ;)

ricardo 2011-10-30 19:10:16
Estimado

Antes que nada gracias por tu trabajo


En la paginacion me aparece el siguiente erro

Message: Plugin by name 'Paginator' was not found in the registry; used paths: Zend_View_Helper_: Zend/View/Helper/;C:/wamp/www/new123/application/views\helpers/

Pablo Morales 2011-10-30 20:39:05
Eso es porque no estas pasando el paginador a la vista

fijate que en el action tengas algo como

$this->view->paginator

posts/list te deberia quedar asi



public function listarAction()
{
$model = new Application_Model_Posts();
$posts = $model->getAll();

Zend_View_Helper_PaginationControl::setDefaultViewPartial('paginator/items.phtml');
$paginator = Zend_Paginator::factory($posts);

if( $this->_hasParam('page')){
$paginator->setCurrentPageNumber( $this->_getParam('page'));
}

$this->view->paginator = $paginator;

}


Controla aca

https://github.com/pablofmorales/News123/blob/master/application/controllers/PostsController.php

:D

ricardo 2011-10-30 22:26:24
Estimado

gracias por contestar ,pero mira estoy seguro que lo tengo igual( a mi tabla le puse curso y la apginacion esta en una carpeta paginator)


Consulta debe haber algo en mi carpeta /view/helper porque en esa carpeta no tengo nada esta vacia


public function listarAction(){

//instanciamos el modelo
$model=new Application_Model_Curso();
$posts=$model->getAll();

Zend_View_Helper_PaginationControl::setDefaultViewPartial('paginator/paginator.phml');
$paginator=Zend_Paginator::factory($posts);

if($this->_hasParam('page')){
$paginator->setCurrentPageNumber($this->_getParam('page'));


}

$this->view->paginator=$paginator;

}

Gracias nuevamente

Pablo Morales 2011-10-30 22:35:29
Pegame el codigo de la vista, que es el que te esta dando el error

ricardo 2011-10-30 22:39:55
agregar






id
titulo
fecha
Borrar
Modificar


paginator)):?>

paginator as $post):?>



id ; ?>
title ; ?>
fecha ; ?>
<a href="/curso/delete/id/id; ?>">
<a href="/curso/update/id/id; ?>">








no hya datos





paginator())):


echo $this->paginator;

endif;
?>

ricardo 2011-10-30 22:42:51
Elimine las etiquetas php porque no muestra bien el comentario gracias nuevamente


agregar






id
titulo
fecha
Borrar
Modificar


if(count($this->paginator)):

foreach($this->paginator as $post):



id ; ?>
title ; ?>
fecha ; ?>
<a href="/curso/delete/id/id; ?>">
<a href="/curso/update/id/id; ?>">



endforeach;

else :


no hya datos



endif;



if(count($this->paginator())):


echo $this->paginator;

endif;

Pablo Morales 2011-10-30 22:44:04
nose ve bien el codigo :s

Chequea que sea igual a https://github.com/pablofmorales/News123/blob/master/application/views/scripts/posts/listar.phtml


Sino subi el codigo en pastebin.com asi lo vemos claramente

ricardo 2011-10-30 22:49:16
Estimado

http://pastebin.com/hjTkGw77

Pablo Morales 2011-10-30 22:57:27
Fijate que en la linea 42 usas $this->paginator(), y es una propiedad no un metodo, seria asi

paginator )):?>
paginator;?>

ricardo 2011-10-30 23:07:08
gracias ahora no me sale el error..aunque no me muestra la paginacion jeje pucha que ando quemado

ricardo 2011-10-30 23:24:32
Muchas gracias ahi me salio completamente

Estimado muchas gracias nuevamente por sus excelentes videos y dedicacion

Willy 2011-11-26 04:26:39
Muy buen tutorial me he visto los 5 videos de corrido, soy tu hincha Pablo morales .. jejeje :D....

Mañana continuare con los demas videos, sigue asi Pablo los los videos estan buenisimos, pero quizas peque de pedilon :P , pero seria ideal que te hagas un video de como trabajar con modulos en zend con frontend y backend incluido, o quizas zend 1* con doctrine 2 podria ser...

Pero el trabajo que haz hecho hasta el momento esta genial!!!! ...

Gracias amigo.

Desde el pais del ceviche, PERU .... :D

Daniel 2011-12-12 14:13:02
hola pablo necesito tu ayuda urgente....estoy utilizando tus videos para hacer mi tesis...
el problema que tengo es el siguiente:
al momento de manda a grabar los datos del formulario en la bd utilizo este codigo:
$row->nombre_producto = $bind['producto'];
$row->descrip_producto = $bind['descripcion'];
$row->id_tipoproducto = (integer)$bind['tipo_producto'];
$row->id_proveedor = (integer)$bind['proveedor'];
$row->id_stock = (integer)$bind['stock'];
$row->id_precio = (integer)$bind['precio'];
pero al momento de actualizar utilizo el metodo que explicas en este video pero me sale un error de objeto no encontrado y no puedo actualizar nose cual es el problema porque utilizo todo el codigo que tu pones aqui espero me puedas ayudar

Daniel 2011-12-12 15:45:26
hola pablo perdon si te molesto pero ya logre arreglar este problema osea quiero decir que ya no me sale error de objeto no encontrado ahora el problema es que no se pasa el id para que se carguen los datos en el formulario... el metodo de update no pasa de este if

if(!$this->_hasParam($id_producto))
{
return $this->_redirect('http://localhost/prueba1/public/productos/listar/');
}

nose que estoy haciendo mal...
a continuacion te pongo todo el metodo de actualizar que que tengo hecho
public function editarAction()
{

if(!$this->_hasParam($id_producto))
{
return $this->_redirect('http://localhost/prueba1/public/productos/listar/');
}

$form = new Application_Form_Producto();
$productos = new Application_Model_Productos();

if($this->getRequest()->isPost())
{
if($form->isValid($this->_getAllParams()))
{

$model = new Application_Model_Productos();
$productos->save($form->getValues());
return $this->_redirect('http://localhost/prueba1/public/productos/listar/');
}
}else
{
$row = $productos->getRow($this->_getParam($id_producto));
if ($row)
{
$form->populate($row->toArray());
}

}
$this->view->form = $form;
}

Pablo Morales 2011-12-12 19:53:05
if(!$this->_hasParam($id_producto))


wrong :P

es $this->_hasParam('id_producto') saludos.

Dennis Huillca Portilla 2011-12-12 20:32:05
Hola Pablo, nuevamente en contacto y agradeciéndote que estés compartiendo tus tutoriales, realmente estuve viendo la potencialidad que tiene Zend y lo amplio de librerias, que se que en un inicio puede parecer muy complicado pero con perseverancia se que luego me será equivalentemente más fácil realizar aplicaciones, bueno mi pregunta es respecto a los contenidos que guardo en este caso con tildes, me di cuenta que cuando recupero (dando click en actualizar) el contenido o el titulo que haya escrito con alguna tilde o comillas y quizás otros caracteres especiales que no consideré pero estoy seguro que tendré el mismo problema, parece que no lo interpreta o no sé como lo debería llamar al hecho que el contenido si existe pero no lo muestra (esto sólo me pasa cuando el contenido tiene algún carácter especial), me di cuenta al chequear un buen rato y darme cuenta que solo pasaba con esas entradas que contenían caracteres especiales, muchas gracias de antemano Pablo.
PD. ahora ya entiendo lo del Layout, es que soy nuevo en esto, pero ahora todo tiene más sentido y cada vez veo la potencialidad de Zend.

Daniel 2011-12-12 23:15:07
gracias de tanto leer ya no distinguia ese pequeño error....pero la verdad no se me cargan los datos en el formulario el metodo getRow esta bien pero nose que pasa con el metodo actualizar

Daniel 2011-12-13 12:28:46
hola...de nuevo a molestar...pero es la unica forma de aprender....sabes no puedo cargar el formulario para editar...el metodo actualizar ya esta arreglado como me lo indicaste anteriormente pero nose si este metodo este bien por fa explicame que esta mal la verdad nose que esta mal....sigue paso a paso tus videos pero no me sale...

public function getRow($id_producto)
{
$id_producto = (int) $id_producto;
$row = $this->find($id_producto)->current();
return $row;
}

Dennis Huillca Portilla 2011-12-13 13:27:15
$row = $productos->getRow($this->_getParam($id_producto));
creo que debe ser $row = $productos->getRow($this->_getParam('id_producto'));
creo que tienes que aprender a usar un depurador te recomiendo el xdebug, te mostrar todo lo que tienes paso a paso, o sino usar echos o print_r para ver si estas pasando parámetros y que es lo que contienen, asi nomás me doy cuenta de mis errores yo también.

Pablo Morales 2011-12-14 00:17:21
@Daniel tiene razon @Dennis

Tenes el mismo problema que antes :D

@Dennis si quieres guardar comillas tenes varias formas por un lado reemplazar los tildes normales como " ' por su otro equivalente ` y el otro era igual pero doble, no lo encuentro en mi teclado :D

O podes escaparlos antes de guardarlos con el metodo quote

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


$name = $db->quote("O'Reilly");
echo $name;
// 'O\'Reilly'

Daniel 2011-12-14 12:02:16
sory sory pero me dejaste en las nubes no entendi nada de lo que me dijiste podrias explicarte mejor.....por otro lado ya arregle lo de las comillas en el id_producto pero igual no me funca...y como que meterme hacer otra cosa como que no me va....quisiera hacerlo con este metodo

Daniel 2011-12-14 13:22:23
hola solo queria comentar que ya logre solucionar el problema que tenia...la cuestion es que en el form se debe dar el mismo nombre a las variables de los elementos agregados que los campos de las tablas es decir si el campo de la tabla se llama nombre_cliente el elemento de tipo texto que se agrega al form tambien debe llamarse asi...no se si tendre razon pero es la unica forma con la que me funciono el metodo actualizar....gracias por las ayudas que me dieron me ayudaron de mucho

Dennis 2011-12-16 12:08:18
si probé poniéndole otros nombres a los campos de mi tabla también y noté lo mismo, setFromArray sólo funciona cuando establesco los ids de los campos del form igual que los campos de la tabla, si los nombres son distintos funciona el método previo que mostró en el video Pablo antes de usar setFromArray en el cual seteamos el nombre del campo de la tabla (que es diferente al id del form que le corresponde) con los campos del $bind. e.g $row->titulo = $bind['title'].

Pablo Morales 2011-12-16 20:07:10
Pega el codigo en pastebin.com y pasa la url asi lo miramos.

Francisco Pinzón 2011-12-26 13:55:43
Duda sobre la cuestion del paginador (soy el del correo webmaster.algo), y ud pone esto despues del foreach
paginator)): ?>
paginator; ?>

La pregunta es, esa variable paginator que pasa a la vista desde el controller, es las misma variable que contiene los datos, verdad, pero. porq eu no me sale nada, asi le ponga un comentario fuera de las condiciones dentro de ese archivo de items, no veo nada, qeue tendre mal

franpisa911@gmail.com 2011-12-26 13:57:46
paginator)): ?>
paginator; ?>

Esa variable traida desde e contrller es la misma que contiene los datos??

Por que no veo nada, ahora pongo cualquiero echo en dicho archivo de items.phtml, y tampoco lo veo, que sera que hago mal???

Nota (yo cambie el nombre de las variables, al fin y al cabo es un nombre) y soy el webmaster.algoq ue he venido preguntandote por mail

franpisa911@gmail.com 2011-12-26 16:23:44
Tengo otro chicharron, cunadio voy a editar una noticia, si el campo en la base de datos tiene tildes o caracteres html, no me los carga en los respectivos campos del form a editar, que será?

pablofmorales@gmail.com 2011-12-26 21:21:08
Francisco, estas pasando mal los datos. FIjate si los datos llegan desde el modelo primero.

Saludos.

Francisco Pinzón 2011-12-27 11:26:00
Pablo, no, efectiavamente los datos salen todos de la base de datos, lo probé de la siguiente manera, etngo un campo llamado
titulo y le deje el dato "Mi Acción a probar" y lo paso al campo de texto del Zend_Form, y no muestra nada, ahora en la base de datos lo cambio por "Mi Acción a probar" y si mi lo muestra en el campo de texto, lógicamente sale así como está en la base de datos.
Ahora, le mando un print_r a la vista donde imprimo el form, y si salen todos los datos llamados del modelo.

Que debo hacer pablo???? que anda mal?? sera que al momento de guardar, le convierto los caracteres a sus respectivos codigo html. pero.... como hacer para que el form lo tome como uno realmente lo lee???

Nalleli 2012-01-04 16:51:49
Todo marcha bien, pero tengo datos en mi BD con "Ñ" y esas curiosamente no me salen en las cajas de texto al ejecutar update, pero en la BD si están almacenadas. En campos que no tienen "Ñ" los datos s emuestran correctamente,auxilio!!

Pablo Morales 2012-01-04 17:12:15
@Nalleli es un problema con el encoding. Chequea que en todos lados tengas utf-8 como encoding.

HTML + SQL + PHP

Sino aparcen estos problemas

Francisco Pinzón 2012-01-04 17:14:13
@Nalleli te pasa exactamanete lo mismo que ami, la unica opcon que tve que imlementar es que en la base de datos se guarden en html (creo que asi se le lama) en vex de ñ, guardar ñ etc. Pero no deberia ser asi, claro, pero que podemos ahcer, ahora lo otro es como pasar ese caracter a ese que te digo, Pablo podes darnos una manito. Nallei mi msn es franpisa@hotmail.com

nalleli.vargas@hotmail.com 2012-01-05 14:13:35
Hola francisco ya te envié la invitación al msn y déjame decirte que ya resolví el problema, lo único que tuve que hacer fue añadir en el application.ini en la parte de [production] estas 3 líneas:

resources.view.encoding = "UTF8"
resources.view.charset = "UTF8"
resources.view.contentType = "text/html; charset=UTF8"

Méndigo encoding, jaja saludos, me avisas si te funcionó!!

Saludos Pablo

Francisco Pinzón 2012-01-05 16:43:10
@Nalleli pregunta, no tienes nada en algun bootstrap?? gracias por su informacion, te agregue queremos charlar pa intercambiar

Gracias Pablo

nalleli.vargas@hotmail.com 2012-01-05 21:20:12
@Francisco

No nada , no tengo nada en mi bootstrap !!

Nalleli 2012-01-11 13:24:15
Como puedo hacer para que al momento de hacer el update cargue todos los valores menos la contraseña????

Francisco Pinzón 2012-01-11 13:33:02
@Nalleli cual es tu cuenta mas habitual de verte on line, mi gmail es franpisa911@(adivine que va aca xD ), y quizas intercambiemos presaberes, por que igual nos falta mas por aprender, pero gracias a @PabloMorales todo va por buen camino

Gabriela 2012-01-14 19:35:08
Hey Pablo,

Saludos desde Lima, Perú. Gracias por los tutos, están muy buenos.

Gabriel 2012-02-19 23:37:23
He llegado hasta esta parte del tutorial sin problemas. Muy clara toda la explicación Pablo !! En alguno de los videos comentas en la parte que explicas sobre la creación del Modelo que es allí también donde se puede hacer uso de tablas relacionadas y traer info sobre mas de una tabla. Tu tienes como explicar o que me facilites algún buen lugar donde comprender como hacer esto bien? Incluyendo los edit, delete, paginado etc, todo lo mismo que haces en estos videos pero con mas de una tabla, no se si me explico. ¿Cual seria la forma correcta y prolija? debo destacar lo prolijo y correcto que me pareció el código que expones y demuestras en el video.
Desde ya muchas gracias por este material ! Saludos desde Uruguay !

Gabriel 2012-02-20 18:42:54
Me disculpo, la pregunta que he realizado anteriormente esta perfectamente bien explicada en la clase 9 y con un poco de creatividad de pueden agregar las funcionalidades de ABM. La pregunta ahora es si quiero agregar un campo o varios de búsqueda, lo he intentado y lo puedo hacer, pero el paginador pierde los parámetros de búsqueda y muestra el contenido normal. Como se puede hacer para solucionar esto sin ensuciar mucho el código?

pablofmorales@gmail.com 2012-02-20 19:55:50
Tenes que editar tu paginador, para que envie los parametros de busqueda + la pagina en la url

Gabriel 2012-02-21 11:57:36
Pablo, muchas gracias por darme las pistas. He modificado lo que sería en el ejemplo de los videos el paginador items.phtml. Dejando por ejemplo el vinculo de volver hacia atrás así: <a href="url(array('page' => $this->previous, 'buscar'=> $this->buscar)); ?>">, lo mismo hice con los otros dos, el del numero de paginas y el de ir hacia adelante. Hasta aquí, muy bien. Lo que me falta es editar la parte de la pagina en la URL que es lo que aún no entiendo bien, como es que paso los valores de búsqueda al paginador?
Gracias y disculpa mi ignorancia

Gabriel 2012-02-21 18:59:33
Me corrijo, lo que he intentado hacer creo que no es necesario. El tema es que estoy intentado hacer esto con una casilla de búsqueda generada con Zend_Form. Al final para que me funcione solo hice esto en el Controlador:

$modelo = new Application_Model_Obras();
$obras=$modelo->buscador($this->_getParam('id'), $this->_getParam('buscar'));
Zend_View_Helper_PaginationControl::setDefaultViewPartial('paginator/items.phtml');
$paginador=Zend_Paginator::factory($obras);
if($this->_hasParam('page')){
$paginador->setCurrentPageNumber($this->_getParam('page'));
}
$this->view->datos=$paginador;
$form = new Application_Form_Buscador();
if($this->getRequest()->isPost()){
if($form->isValid($this->_getAllParams())){
return $this->_redirect('/posts/buscador/buscar/'.$this->_getParam('buscar')));
}
}
$this->view->form = $form;

Ahora no se porque, pero cuando me devuelve la pagina con los resultados, el texto que estaba buscando desaparece como puedo hacer para que siga allí?

pablofmorales@gmail.com 2012-02-21 20:56:04
Tenes que agregarle los parametros al formulario.

Podes hacer $form->populate($this->_getAllParams());

Gabriel 2012-02-21 22:16:44
Pablo, efectivamente esta linea de código resuelve el asunto. Ahora solo me queda resolver algo jeje, resulta que recién ahora me doy cuenta de un comportamiento extraño que tiene este código. Cuando cargo la URL desde el explorador y luego relleno los parámetros de búsqueda (he puesto varios campos de búsqueda de distintos tipos ahora), funciona perfectamente, me devuelve los datos buscados y me carga el formulario nuevamente con el texto que había puesto. Pero solo la primera vez, porque cuando quiero hacer la búsqueda nuevamente, no hace nada, me devuelve el mismo resultado tanto en el listado como en el formulario. Hice un debug medio a mano y veo que en las variables salen valores que se introdujeron en la primera vez. Es como si el Submit no enviara los valores, pero solo después de hacerlo por primera vez bien? Pego el código mas abajo para ver que opinas, seguro que en algo le estoy pegando mal. Una vez que lo tenga claro me gustaría que quede publicada la solución, en este blog si lo permites, estoy seguro que algo puede aportar, he buscado por toda la web y no doy con una solución clara y prolija y que la entienda gente como yo jaja. Se trata de un buscador con uno o mas campos que devuelve un listado paginado con los resultados.

Aquí va el intento:

$modelo = new Application_Model_Obras();
$obras=$modelo->buscador($this->_getParam('id'),
$this->_getParam('titulo'),
$this->_getParam('año'),
$this->_getParam('tipo'),
$this->_getParam('tecnica'),
$this->_getParam('coleccion'));
Zend_View_Helper_PaginationControl::setDefaultViewPartial('paginator/items.phtml');
$paginador=Zend_Paginator::factory($obras);
if($this->_hasParam('page')){
$paginador->setCurrentPageNumber($this->_getParam('page'));
}
$this->view->datos=$paginador;

$form = new Application_Form_Buscador();
$form->populate($this->_getAllParams());
if($this->getRequest()->isPost()){
if($form->isValid($this->_getAllParams())){
return $this->_redirect('/obras/buscador/id/'.$this->_getParam('id').
'/titulo/'.$form->getValue('titulo').
'/año/'.$form->getValue('año').
'/tipo/'.$form->getValue('tipo').
'/tecnica/'.$form->getValue('tecnica').
'/coleccion/'.$form->getValue('coleccion')
);
}
}
$this->view->form = $form;

Gabriel 2012-02-21 22:48:21
Encontré la solución ! Era mucho mas sencilla de lo que pensaba, leyendo un poco las respuestas que das en la sección de la clase 9 respecto a que SI o SI hay que usar GET para esto, hice un $form->setMethod('get'); y luego, yo tenía hecha una comprobación de datos POST, que tal caso, redirigía hacia una URL que se generaba dinámicamente y que BORRE porque efectivamente no servía para nada.

A ver que dice el Profe !

Uno o más campos de búsqueda que producen un listado paginado.
Código del buscadorAction:

$modelo = new Application_Model_Ejemplos();
$resultados=$modelo->buscador($this->_getParam('id'), $this->_getParam('serach'));
Zend_View_Helper_PaginationControl::setDefaultViewPartial('paginator/items.phtml');
$paginador=Zend_Paginator::factory($resultados);
if($this->_hasParam('page')){
$paginador->setCurrentPageNumber($this->_getParam('page'));
}
$this->view->datos=$paginador;
$form = new Application_Form_Buscador();
$form->setMethod('get');
$form->populate($this->_getAllParams());
$this->view->form = $form;

pablofmorales@gmail.com 2012-02-21 22:53:30
Perfecto ;)

Rodrigo Moya 2012-02-22 12:26:58
Hola Pablo, saludos desde Chile y nuevamente gracias por tu blog.

Me he estado metiendo más en el mundo de Zend, y tengo la meta de que en unos meses más pueda optar a la certificación. Por lo mismo, he estado estudiando tus tutoriales, pero también he intentado ir adaptandolos a sitios y trabajos que he tenido que hacer, para ver "como se verian" en ZF.

Tengo una duda, a lo mejor es todo un tema de concepto, pero es respecto al tutorial y a la forma en como trabajo.

Ahora estoy trabajando en un sistema de administración de CDs (Algo bastante sencillo). Mi duda es, que los tutoriales (Bueno, hasta éste) muestran el trabajo hacia una tabla de la base de datos.

¿Que pasa si tengo que guardar el id de un campo como llave foranea en otro?

Me explico: Tengo una tabla llamada "pista" y tiene los siguientes campos :

Pista
id_pista
Nombre

Luego tengo la tabla "Album" y tiene el campo id_pista :

album
id_album
nombre
id_pista

¿Como registro el id_pista en ZF?

Gracias totales, y cuando vengas a Chile te invito un tinto XD...

pablofmorales@gmail.com 2012-02-22 12:54:16
En este capitulo te explico como funciona lo de tablas relacionadas

http://blog.pablo-morales.com/2011/11/zf-clase-9-join-y-view-helpers/


Mira, que tomo la invitacion del vino al pie de la letra, yo no olvido!!!

Rodrigo Moya 2012-02-22 18:42:55
Gracias por tu respuesta pablo.

Super bien, aunque por como lo veo mejor llegar al capítulo pasando por los anteriores, para ir entendiendo bien y sin saltarse etapas.

Aprovechandome de la buena voluntad, Estaba leyendo que ZF tambien trae una biblioteca de jQuery (http://framework.zend.com/manual/en/zendx.jquery.form.html). ¿La has usado? ¿Es mejor a integrarlo separado (Como biblioteca de javascript)?

¿Podrías hacer un videotutorial más adelante?

Respecto a la invitación, yo tampoco olvido. Genial tener un buen rato de conversacion sobre bytes y otros temas con una buena copa de vino en la mano.

Saludos!

pablofmorales@gmail.com 2012-02-22 18:56:26
Con respecto a la lib en ZendX_Jquery, la use, pero no me copo mucho. Realmente prefiero usar todo lo que sea js desde el lado del cliente y no tenerlo en otro lado, es muy facil integrar autocomplete de formularios, o enviar el formulario por ajax, y algunas cosas mas, pero no me gusta como me queda y soy bastante manioso con eso. Prefiero no usarlo, igual si quieres usarlo eso es a gusto personal, no es facil integrarla, si vez el manual en ingles, te das cuenta mirando el codigo.[