Por ejemplo, tienes que mostrar en un combo la lista de Marcas, entonces tienes tu controlador Marca y tu accion combo siguiendo las convenciones de Kumbiaphp creas una vista combo.phtml, hasta ahi nada dificil pero que pasa si tienes 10 tablas y por cada una de ellas hay que crear lo mismo!!! O_o!!!
Obviamente diras : "Hey debe haber una manera de evitar todo esto!!!" y claro que la hay, para esto estan los Templates.
Vamos al ejemplo, tenemos que cargar 2 combos, uno perteneciente a la tabla Marca y otro de la tabla Area.
Entonces para eso tenemos nuestros controladores MarcaController.php y AreaController.php, y cada uno con sus respectivos modelos, en ambos modelos he implementado el metodo getAll().
Modelo : Marca.php
Bueno ya tenemos nuestos modelos ahora veamos nuestros controladoresclass Marca extends ActiveRecord{ public function getAll(){ return $this->find("order: 2 asc"); } }Modelo : Area.php
class Area extends ActiveRecord{ public function getAll(){ return $this->find("order: 2 asc"); } }
Marca_controller.php
class MarcaController extends ApplicationController { //carga el modelo Marca public $models=array('marca'); public function combo(){ $this->data=$this->Marca->getAll(); $this->reference="area_id"; $this->text="nombre"; $this->set_response('view'); $this->render(null,"combo");//plantilla que queremos usar [combo] } }Modelo : Area.php
class AreaController extends ApplicationController { public $models=array('area'); public function combo(){ $this->data=$this->Area->getAll(); $this->reference="area_id"; $this->text="nombre"; $this->set_response('view'); $this->render(null,"combo"); } }
Voy a explicarles como funciona la accion combo() de los controladores, en realidad el truco es bastante simple, hemos creado una plantilla o template llamado combo.phtml el cual lo ubicaremos en /miapp/apps/views/templates, este es su codigo
<?php echo select_tag(array($reference, $data, 'option' => $text, 'include_blank'=> 'Seleccione')); ?>
creo que ya se habrán dado una idea de por donde va todo, en nuestra accion combo(), basicamente asignamos los valores a las variables de la plantilla mostrada arriba, luego en mi caso lo necesito para cargarlo mediante ajax por eso he puesto $this->set_response('view');, y en la siguiente linea lo que hago es decirle "no me cargues niguna vista y utiliza el template combo" $this->render(vista,template) en mi caso $this->render(null,"combo"). Si son como yo querrán ver como funciona o al menos un pantallazo, bueno, apliquemos lo hecho, imaginemos que tenemos un controlador llamado TestController y una accion dry este es el codigo de su vista donde cargaremos nuestros combos mediante el metodo load de jquery.
<div class="half-left-panel"> <h2>Carga de Areas</h2> <?php echo link_to("area/combo","Cargar areas","class: config");?> <div id="areas"></div> </div> <div class="half-right-panel"> <h2>Carga de Marcas</h2> <?php echo link_to("marca/combo","Cargar marcas","class: config");?> <div id="marcas"></div> </div>Javascript
<script type="text/javascript"> $(document).ready(function(){ $("a").click(function(){ var _url=$(this).attr('href'); if($(this).attr('href').indexOf('area')!= -1){ $('#areas').html('<span><img src="<?php echo PUBLIC_PATH ?>/img/ui/ajax-loader.gif" /> Cargando ...</span>'); $('#areas').load(_url); }else{ $('#marcas').html('<span><img src="<?php echo PUBLIC_PATH ?>/img/ui/ajax-loader.gif" /> Cargando ...</span>'); $('#marcas').load(_url); } return false; }); }); </script>
Como veran en nuestro codigo javascript lo que hemos puesto es que cuando clickemos en los botones cargue asincronamente las rutas /area/combo o marca/combo Eso se veria algo asi:
Este principio tambien se puede aplicar para Tablas en otro post que pronto terminaré les explicaré esto.
Esta es una forma de manejar los templates muy útil
ResponderEliminarpara estos casos yo recomiendo usar partials, es mucho mas fácil llamar un partial con una linea de código y tener una "micro-vista" con su estructura semantica y los datos organizados si se quiere
he visto buenos post en su blog
felicidades
Camilo, me alegro que te hayan gustado los posts, pronto estaré publicando más ^_^ sobre Kumbiaphp, mi interés es compartir y al mismo tiempo aprender.
ResponderEliminarjeje
ResponderEliminaral publicar lo que uno aprende asegura que no se le olviden las cosas ;)