Diferencia entre revisiones de «Listas simples enlazadas jquery»
De KumbiaPHP Framework Wiki
Línea 85: | Línea 85: | ||
* clientes_controller.php | * clientes_controller.php | ||
+ | Vamos a trabajar con un controller llamado clientes, acá solo mostrareos los 3 niveles de las listas, nada más, es decir, no vamos a trabajar con el modelo clientes ya que puede ser 'usuarios, proveedores, provesionales, auxiliares, pacientes, etc..', la base siempre es la misma | ||
+ | |||
<source lang=php> | <source lang=php> | ||
− | <?php | + | <?php |
+ | Load::model('regiones'); | ||
+ | Load::model('comunas'); | ||
+ | Load::model('ciudades'); | ||
class ClientesController extends ApplicationController{ | class ClientesController extends ApplicationController{ | ||
− | public function index() { | + | public function index() { |
+ | |||
} | } | ||
public function create(){ | public function create(){ | ||
− | + | $regiones = new Regiones(); | |
− | + | $this->regiones = $regiones->buscar(); | |
if($this->has_post('clientes')){ | if($this->has_post('clientes')){ | ||
//SUBMIT | //SUBMIT | ||
} | } | ||
} | } | ||
− | public function getComunas( | + | public function getComunas(){ |
− | |||
$this->set_response('view'); | $this->set_response('view'); | ||
− | $this-> | + | $comunas = new Comunas(); |
+ | $this->comunas = $comunas->buscar($this->post('regiones_id')); | ||
} | } | ||
− | public function getCiudades( | + | public function getCiudades(){ |
− | |||
$this->set_response('view'); | $this->set_response('view'); | ||
− | $this-> | + | $ciudades = new Ciudades(); |
+ | $this->ciudades = $ciudades->buscar($this->post('comunas_id')); | ||
} | } | ||
} | } | ||
Línea 113: | Línea 119: | ||
</source> | </source> | ||
+ | * Modelo Regiones | ||
+ | |||
+ | <source lang=php> | ||
+ | <?php | ||
+ | class Regiones extends ActiveRecord{ | ||
+ | public function buscar(){ | ||
+ | return $this->find('order: nombre'); | ||
+ | } | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | * Modelo Comunas | ||
+ | |||
+ | <source lang=php> | ||
+ | <?php | ||
+ | class Comunas extends ActiveRecord{ | ||
+ | public function buscar($regiones_id){ | ||
+ | return $this->find("regiones_id = $regiones_id", 'order: nombre'); | ||
+ | } | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | * Modelo Ciudades | ||
+ | |||
+ | <source lang=php> | ||
+ | <?php | ||
+ | class Ciudades extends ActiveRecord{ | ||
+ | public function buscar($comunas_id){ | ||
+ | return $this->find("comunas_id = $comunas_id", 'order: nombre'); | ||
+ | } | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
− | * create.phtml | + | * Vista create.phtml |
<source lang=php> | <source lang=php> | ||
Línea 122: | Línea 163: | ||
<table id='table_forms'> | <table id='table_forms'> | ||
<tr> | <tr> | ||
− | <th> | + | <th>Región</th> |
<td> | <td> | ||
<?php | <?php | ||
− | + | echo select_tag(array('clientes.regiones_id', $regiones, 'option' => 'nombre', 'include_blank' => 'Seleccione...')); | |
− | |||
− | |||
− | |||
?> | ?> | ||
</td> | </td> | ||
Línea 149: | Línea 187: | ||
<script type='text/javascript'> | <script type='text/javascript'> | ||
$("#clientes_regiones_id").change(function(){ | $("#clientes_regiones_id").change(function(){ | ||
− | var regiones_id = $('#clientes_regiones_id'). | + | var regiones_id = $('#clientes_regiones_id').value(); |
− | + | $.ajax({ | |
− | + | type: "POST", | |
+ | url: "<?php echo PUBLIC_PATH . 'regiones/getComunas/'; ?>", | ||
+ | data: "regiones_id=" + regiones_id, | ||
+ | success: function(html){ | ||
+ | $("#div_comunas").html(html); | ||
+ | } | ||
+ | }); | ||
}); | }); | ||
</script> | </script> | ||
Línea 157: | Línea 201: | ||
− | * getComunas.phtml | + | * Vista getComunas.phtml |
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
− | echo select_tag(array("clientes.comunas_id", | + | echo select_tag(array("clientes.comunas_id", $comunas, 'option' => 'nombre', 'include_blank'=> 'Seleccione...')); |
− | |||
− | |||
− | |||
− | |||
?> | ?> | ||
<script type='text/javascript'> | <script type='text/javascript'> | ||
$("#clientes_comunas_id").change(function(){ | $("#clientes_comunas_id").change(function(){ | ||
− | var comunas_id = $('#clientes_comunas_id'). | + | var comunas_id = $('#clientes_comunas_id').value(); |
− | + | $.ajax({ | |
− | + | type: "POST", | |
+ | url: "<?php echo PUBLIC_PATH . 'regiones/getCiudades/'; ?>", | ||
+ | data: "comunas_id=" + comunas_id, | ||
+ | success: function(html){ | ||
+ | $("#div_ciudades").html(html); | ||
+ | } | ||
+ | }); | ||
}); | }); | ||
</script> | </script> | ||
</source> | </source> | ||
− | * getCiudades.phtml | + | * Vista getCiudades.phtml |
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
− | echo select_tag(array('clientes.ciudades_id', | + | echo select_tag(array('clientes.ciudades_id', $ciudades, 'option'=> 'nombre', 'include_blank'=>'Seleccione...')); |
− | |||
− | |||
− | |||
− | |||
?> | ?> | ||
</source> | </source> |
Revisión del 21:20 22 mar 2010
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
- incluir libreria jquery
Editamos el template activo y adicionamos esta linea
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
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
Vamos a trabajar con un controller llamado clientes, acá solo mostrareos los 3 niveles de las listas, nada más, es decir, no vamos a trabajar con el modelo clientes ya que puede ser 'usuarios, proveedores, provesionales, auxiliares, pacientes, etc..', la base siempre es la misma
<?php
Load::model('regiones');
Load::model('comunas');
Load::model('ciudades');
class ClientesController extends ApplicationController{
public function index() {
}
public function create(){
$regiones = new Regiones();
$this->regiones = $regiones->buscar();
if($this->has_post('clientes')){
//SUBMIT
}
}
public function getComunas(){
$this->set_response('view');
$comunas = new Comunas();
$this->comunas = $comunas->buscar($this->post('regiones_id'));
}
public function getCiudades(){
$this->set_response('view');
$ciudades = new Ciudades();
$this->ciudades = $ciudades->buscar($this->post('comunas_id'));
}
}
?>
- Modelo Regiones
<?php
class Regiones extends ActiveRecord{
public function buscar(){
return $this->find('order: nombre');
}
}
?>
- Modelo Comunas
<?php
class Comunas extends ActiveRecord{
public function buscar($regiones_id){
return $this->find("regiones_id = $regiones_id", 'order: nombre');
}
}
?>
- Modelo Ciudades
<?php
class Ciudades extends ActiveRecord{
public function buscar($comunas_id){
return $this->find("comunas_id = $comunas_id", 'order: nombre');
}
}
?>
- Vista 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', $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'>
$("#clientes_regiones_id").change(function(){
var regiones_id = $('#clientes_regiones_id').value();
$.ajax({
type: "POST",
url: "<?php echo PUBLIC_PATH . 'regiones/getComunas/'; ?>",
data: "regiones_id=" + regiones_id,
success: function(html){
$("#div_comunas").html(html);
}
});
});
</script>
- Vista getComunas.phtml
<?php
echo select_tag(array("clientes.comunas_id", $comunas, 'option' => 'nombre', 'include_blank'=> 'Seleccione...'));
?>
<script type='text/javascript'>
$("#clientes_comunas_id").change(function(){
var comunas_id = $('#clientes_comunas_id').value();
$.ajax({
type: "POST",
url: "<?php echo PUBLIC_PATH . 'regiones/getCiudades/'; ?>",
data: "comunas_id=" + comunas_id,
success: function(html){
$("#div_ciudades").html(html);
}
});
});
</script>
- Vista getCiudades.phtml
<?php
echo select_tag(array('clientes.ciudades_id', $ciudades, 'option'=> 'nombre', 'include_blank'=>'Seleccione...'));
?>