Listas simples enlazadas
De KumbiaPHP Framework Wiki
| Este Artículo esta siendo revisado por los Kumbieros. El ejemplo presente es completamente funcional, pero su redacción debe mejorar |
Contenido |
[editar] Listas Enlazadas de tres niveles
Para nuestro ejemplos vamos a utilizar listas simples [1] con 3 niveles, Regiones, Comunas y Ciudades.
[editar] Requerimientos
- Cambiar autocarga de los modelos
Editamos el archivo config.ini y modificamos models_autoload = On por models_autoload = Off
- Cargar Prototype
Editamos el template activo y adicionamos esta linea
<?php View::partial('kumbia/prototype'); ?>
[editar] Tablas
# # Table structure for table 'regiones' # # DROP TABLE IF EXISTS regiones; CREATE TABLE `regiones` ( `id` int(4) NOT NULL auto_increment, `nombre` varchar(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; # # Dumping data for table 'regiones' # INSERT INTO regiones VALUES (1,'Primera Region'); INSERT INTO regiones VALUES (3,'Tercera Region'); INSERT INTO regiones VALUES (2,'Segunda Region'); # # Table structure for table 'comunas' # # DROP TABLE IF EXISTS comunas; CREATE TABLE `comunas` ( `id` int(4) NOT NULL auto_increment, `regiones_id` int(4) NOT NULL, `nombre` varchar(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; # # Dumping data for table 'comunas' # INSERT INTO comunas VALUES (4,3,'Primera Comuna'); INSERT INTO comunas VALUES (3,2,'Primera Comuna'); INSERT INTO comunas VALUES (2,1,'Segunda Comuna'); INSERT INTO comunas VALUES (1,1,'Primera Comuna'); # # Table structure for table 'ciudades' # # DROP TABLE IF EXISTS ciudades; CREATE TABLE `ciudades` ( `id` int(4) NOT NULL auto_increment, `comunas_id` int(4) NOT NULL, `nombre` varchar(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1; # # Dumping data for table 'ciudades' # INSERT INTO ciudades VALUES (6,3,'Tercera Ciudad'); INSERT INTO ciudades VALUES (5,3,'Segunda Ciudad'); INSERT INTO ciudades VALUES (4,3,'Primera Ciudad'); INSERT INTO ciudades VALUES (3,2,'Segunda Ciudad'); INSERT INTO ciudades VALUES (2,2,'Primera Ciudad'); INSERT INTO ciudades VALUES (1,1,'Primera Ciudad');
[editar] Ejemplo
- clientes_controller.php
<?php class ClientesController extends ApplicationController{ public function index() { } public function create(){ Load::model('clientes'); Load::model('regiones'); if($this->has_post('clientes')){ //SUBMIT } } public function getComunas($regiones_id = 0){ Load::model('comunas'); $this->set_response('view'); $this->regiones_id = $regiones_id; } public function getCiudades($comunas_id = 0){ Load::model('ciudades'); $this->set_response('view'); $this->comunas_id = $comunas_id; } } ?>
- create.phtml
<?php View::content(); ?> <?php echo form_tag("$controller_name/$action_name"); ?> <table id='table_forms'> <tr> <th>Región</th> <td> <?php echo select_tag(array('clientes.regiones_id', 'order' => 'nombre', 'Regiones', 'option' => 'nombre', 'include_blank' => 'Seleccione...')); ?> </td> </tr> <tr> <th>Comuna</th> <td><div id='div_comunas'></div><td> </tr> <tr> <th>Ciudad</th> <td><div id='div_ciudades'></div></td> </tr> <tr> <td colspan="2" align="center"><?php echo submit_tag('Agregar')?></td> </tr> </table> <?php echo end_form_tag(); ?> <script type='text/javascript'> new Event.observe('clientes_regiones_id', 'change', function(){ var regiones_id = document.getElementById('clientes_regiones_id').value; ruta = "<?php echo get_kumbia_url('clientes/getComunas/'); ?>" + regiones_id; new AJAX.viewRequest({ action: ruta, container: 'div_comunas' }) }) </script>
- getComunas.phtml
<?php echo select_tag(array("clientes.comunas_id", 'order' => 'nombre', 'Comunas', 'option' => 'nombre', 'conditions' => "regiones_id = $regiones_id", 'include_blank' => 'Seleccione...')); ?> <script type='text/javascript'> new Event.observe("clientes_comunas_id", "change", function(){ comunas_id = document.getElementById('clientes_comunas_id').value; ruta = "<?php echo get_kumbia_url('clientes/getCiudades/'); ?>" + comunas_id; new AJAX.viewRequest({ action: ruta, container: 'div_ciudades' }) }) </script>
- getCiudades.phtml
<?php echo select_tag(array('clientes.ciudades_id', 'order' => 'nombre', 'Ciudades', 'option' => 'nombre', 'conditions' => "comunas_id = $comunas_id", 'include_blank' => 'Seleccione...')); ?>