Listas simples enlazadas

De KumbiaPHP Framework Wiki

Listas Enlazadas de tres niveles

Para nuestro ejemplos vamos a utilizar listas simples [1] con 3 niveles, Regiones, Comunas y Ciudades.

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'); ?>

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');

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&oacute;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...'));
?>