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
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.
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
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.
Increibles videos! He logrado aclarar muchas dudas!
Espero por más videos!
Saludos!
Steven S.
Saludos!
Steven S.
@steven @pedro. Me parece buen tema, voy a tratar de armarlo para la semana que viene ;)
Muy interesantes tus videos. Saludos.
$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.
Saludos.
Suerte
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.
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/
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
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
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;
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
http://pastebin.com/hjTkGw77
paginator )):?>
paginator;?>
Estimado muchas gracias nuevamente por sus excelentes videos y dedicacion
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
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
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;
}
wrong :P
es $this->_hasParam('id_producto') saludos.
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.
public function getRow($id_producto)
{
$id_producto = (int) $id_producto;
$row = $this->find($id_producto)->current();
return $row;
}
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.
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'
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
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
Saludos.
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???
HTML + SQL + PHP
Sino aparcen estos problemas
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
Gracias Pablo
No nada , no tengo nada en mi bootstrap !!
Saludos desde Lima, Perú. Gracias por los tutos, están muy buenos.
Desde ya muchas gracias por este material ! Saludos desde Uruguay !
Gracias y disculpa mi ignorancia
$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í?
Podes hacer $form->populate($this->_getAllParams());
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;
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;
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...
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!!!
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!



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.?