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(){
Load::model('clientes');
+
$regiones = new Regiones();
Load::model('regiones');
+
$this->regiones = $regiones->buscar();
 
if($this->has_post('clientes')){
 
if($this->has_post('clientes')){
 
//SUBMIT
 
//SUBMIT
 
}
 
}
 
}
 
}
public function getComunas($regiones_id = 0){
+
public function getComunas(){
Load::model('comunas');
 
 
$this->set_response('view');
 
$this->set_response('view');
$this->regiones_id = $regiones_id;
+
$comunas = new Comunas();
 +
$this->comunas = $comunas->buscar($this->post('regiones_id'));
 
}
 
}
 
 
 
 
public function getCiudades($comunas_id = 0){
+
public function getCiudades(){
Load::model('ciudades');
 
 
$this->set_response('view');
 
$this->set_response('view');
$this->comunas_id = $comunas_id;
+
$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>Regi&oacute;n</th>
+
<th>Región</th>
 
<td>
 
<td>
 
<?php
 
<?php
echo select_tag(array('clientes.regiones_id',  
+
echo select_tag(array('clientes.regiones_id', $regiones, 'option' => 'nombre', 'include_blank' => 'Seleccione...'));
                                        'order' => 'nombre',
 
                                        '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').val();
+
var regiones_id = $('#clientes_regiones_id').value();
url = "<?php echo get_kumbia_url('regiones/getComunas/'); ?>" + regiones_id;
+
        $.ajax({
$("#div_comunas").load(url);
+
          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...'));
                'order' => 'nombre',
 
                'Comunas', 'option' => 'nombre',
 
'conditions' => "regiones_id = $regiones_id",
 
'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').val();
+
var comunas_id = $('#clientes_comunas_id').value();
url = "<?php echo get_kumbia_url('regiones/getCiudades/'); ?>" + comunas_id;
+
        $.ajax({
$("#div_ciudades").load(url);
+
          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...'));
                'order' => 'nombre',
 
                'Ciudades', 'option' => 'nombre',
 
'conditions' => "comunas_id = $comunas_id",
 
'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...'));
?>