Siempre es bueno recordar lo simple en forma simple, por eso aqui pongo un ejemplo de cómo incoporar un simple boton en una pagina html que lea un IDPRODUCTO y traiga en respuesta (usando ajax) una lista de productos relacionados.
Artículos Relacionados:
- Cómo insertar scripts eficientemente en Yii framework:http://trucosdeprogramacionmovil.blogspot.com/2012/12/script-vs-cclientscript-yiiframework.html
- Cómo insertar el script de jQuery en tu aplicación con Yii Framework:http://yiiframeworkenespanol.org/foro/showthread.php?tid=71
- Cómo insertar Ajax usando recursos de Yii:http://yiiframeworkenespanol.org/foro/showthread.php?tid=60
Ejemplo
Via ajax se pedirá a un action alojado en ProductoController.php que nos de una lista de objetos en formato JSON (por eso en el action veras el "header" y la llamada a CJSON::encode ). Una vez recibida la lista se procesa item por item creando una lista que mostrara un ID y un nombreProducto en un html tag de tipo "UL" (una simple lista).
Paso 1
Tienes una página index.html con un simple botón y un área para incorporar el listado allí. Omitiré la parafernalia de Yii Framework, dejando solo lo del ejemplo:
- <div>
- <input type='button' id='miboton' value='Probar'></input>
- <div id='listado-va-aqui'>...</div>
- </div>
Paso 2
A esa página index.html se le adjunta el script:
- <script>
- $.fn.imprimeListado = function(listado, selector){
- selector.html('Listado:');
- selector.append('<UL></UL>');
- var ul = selector.find('ul');
- $.each(listado, function(key,item){
- // item dependera de tu modelo Producto.php
- var li = "<li alt='"+item.id+"'>"+item.nombreProducto+"</li>";
- ul.append(li);
- li = ul.find("[alt='"+item.id+"']");
- li.click(function(){
- var _item = $(this).attr('alt');
- alert("hola hiciste click en el item: "._item);
- });
- });
- }
- $.fn.leerProductos = function(idproducto, selector){
- selector.html("<img src='images/loading.gif'/>");
- $.ajax({
- url: 'index.php?r=/producto/listadoajax/',
- type: 'post',
- cache: false,
- data: { idproducto: idproducto },
- success: function(resp){
- if(resp.ok == true){
- $.fn.imprimeListado(resp.listado, selector);
- }else{
- selector.html(resp.mensaje);
- }
- },
- error: function(e){
- selector.html(e.responseText);
- }
- });
- }
- $('#miboton').click(function(){
- $.fn.leerProductos(123, $('#listado-va-aqui'));
- });
- </script>
Paso 3
Se crea el action en el lado de Yii Framework, en el controlador obviamente:
- public function actionListadoAjax(){
- // funciona via POST a proposito para saber.
- $idproducto = $_POST['idproducto'];
- $listado = Producto::model()->findAllByAttributes(
- array('idproducto'=>$idproducto));
- if($listado == null){
- header("Content-type: application/json");
- echo CJSON::encode(array('ok'=>false,
- 'mensaje'=>'idproducto no tiene items',
- 'listado'=>null));
- }
- else {
- header("Content-type: application/json");
- echo CJSON::encode(array('ok'=>true,
- 'mensaje'=>'', 'listado'=>$listado));
- }
- // si ocurre una excepcion o si se emite una
- // entonces caera en la seccion "error" del
- // cuerpo de las opciones del elemento $.ajax:
- // throw new Exception('pruebame');
- }
No hay comentarios:
Publicar un comentario