Diferencia entre revisiones de «Listas simples enlazadas jquery Kumbiaphp Spirit beta2»
De KumbiaPHP Framework Wiki
m (→Requerimientos) |
|||
(No se muestran 4 ediciones intermedias de 3 usuarios) | |||
Línea 6: | Línea 6: | ||
* incluir libreria jquery | * incluir libreria jquery | ||
− | Editamos el template activo y adicionamos esta linea | + | Editamos el template activo y adicionamos esta linea, debemos identificar ante todo cual es el template que estamos usando y agregar la libreria, de lo contrario el codigo .js que incluimos mas adelante no funcionara correctamente. |
<source lang=php> | <source lang=php> | ||
− | <?php echo Tag::js('jquery/jquery | + | <?php echo Tag::js('jquery/jquery.min'); ?> |
</source> | </source> | ||
Línea 81: | Línea 81: | ||
* 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, | + | 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, profesionales, auxiliares, pacientes, etc..', la base siempre es la misma |
Línea 90: | Línea 90: | ||
*/ | */ | ||
Load::models('regiones','comunas','ciudades'); | Load::models('regiones','comunas','ciudades'); | ||
− | class ClientesController extends | + | class ClientesController extends AppController{ |
public function index() { | public function index() { | ||
Línea 102: | Línea 102: | ||
} | } | ||
public function getComunas(){ | public function getComunas(){ | ||
− | View::response('view'); | + | View::response('view'); //nota se manda $regiones_id a la vista de aquí es que sale |
− | + | $this->regiones_id=Input::post('regiones_id'); | |
− | $this-> | ||
} | } | ||
public function getCiudades(){ | public function getCiudades(){ | ||
View::response('view'); | View::response('view'); | ||
− | + | $this->comunas_id=Input::post('comunas_id');//y de aquí se envia $comunas_id | |
− | $this-> | ||
} | } | ||
} | } | ||
Línea 116: | Línea 114: | ||
</source> | </source> | ||
− | * Modelo | + | * Modelo regiones.php |
<source lang=php> | <source lang=php> | ||
Línea 128: | Línea 126: | ||
</source> | </source> | ||
− | * Modelo | + | * Modelo comunas.php |
<source lang=php> | <source lang=php> | ||
Línea 140: | Línea 138: | ||
</source> | </source> | ||
− | * Modelo | + | * Modelo ciudades.php |
<source lang=php> | <source lang=php> | ||
Línea 163: | Línea 161: | ||
<li> | <li> | ||
<label>Región</label> | <label>Región</label> | ||
− | <?php echo Form::dbSelect('clientes.regiones_id', | + | <?php echo Form::dbSelect('clientes.regiones_id', 'nombre', array('regiones','buscar'), '- seleccione -'); ?> |
</li> | </li> | ||
<li> | <li> | ||
Línea 173: | Línea 171: | ||
<div id='div_ciudades'></div> | <div id='div_ciudades'></div> | ||
</li> | </li> | ||
− | + | </ol> | |
− | |||
− | |||
− | |||
− | |||
</fieldset> | </fieldset> | ||
+ | <?php echo Form::submit('Agregar');?> | ||
<?php echo Form::close(); ?> | <?php echo Form::close(); ?> | ||
− | |||
<script type='text/javascript'> | <script type='text/javascript'> | ||
$("#clientes_regiones_id").change(function(){ | $("#clientes_regiones_id").change(function(){ | ||
Línea 201: | Línea 195: | ||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
− | echo Form::dbSelect("clientes.comunas_id", | + | echo Form::dbSelect("clientes.comunas_id", 'nombre', array('comunas','buscar',$regiones_id), '- Seleccione -'); |
?> | ?> | ||
Línea 223: | Línea 217: | ||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
− | echo Form::dbSelect('clientes.ciudades_id', | + | echo Form::dbSelect('clientes.ciudades_id', 'nombre', array('ciudades', 'buscar', $comunas_id), '- Seleccione -'); |
?> | ?> | ||
</source> | </source> |
Revisión actual del 23:29 27 oct 2014
Listas Enlazadas de tres niveles[editar]
Para nuestro ejemplos vamos a utilizar listas simples [1] con 3 niveles, Regiones, Comunas y Ciudades.
Requerimientos[editar]
- incluir libreria jquery
Editamos el template activo y adicionamos esta linea, debemos identificar ante todo cual es el template que estamos usando y agregar la libreria, de lo contrario el codigo .js que incluimos mas adelante no funcionara correctamente.
<?php echo Tag::js('jquery/jquery.min'); ?>
Tablas[editar]
#
# 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[editar]
- 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, profesionales, auxiliares, pacientes, etc..', la base siempre es la misma
<?php
/**
* Carga de Modelos
*/
Load::models('regiones','comunas','ciudades');
class ClientesController extends AppController{
public function index() {
}
public function create(){
$regiones = new Regiones();
$this->regiones = $regiones->buscar();
if(Input::hasPost('clientes')){
//SUBMIT
}
}
public function getComunas(){
View::response('view'); //nota se manda $regiones_id a la vista de aquí es que sale
$this->regiones_id=Input::post('regiones_id');
}
public function getCiudades(){
View::response('view');
$this->comunas_id=Input::post('comunas_id');//y de aquí se envia $comunas_id
}
}
?>
- Modelo regiones.php
<?php
class Regiones extends ActiveRecord{
public function buscar(){
return $this->find('order: nombre');
}
}
?>
- Modelo comunas.php
<?php
class Comunas extends ActiveRecord{
public function buscar($regiones_id){
return $this->find("regiones_id = $regiones_id", 'order: nombre');
}
}
?>
- Modelo ciudades.php
<?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::open(); ?>
<fieldset>
<legend>Mantenedor de Clientes</legend>
<ol>
<li>
<label>Región</label>
<?php echo Form::dbSelect('clientes.regiones_id', 'nombre', array('regiones','buscar'), '- seleccione -'); ?>
</li>
<li>
<label>Comuna</label>
<div id='div_comunas'></div>
</li>
<li>
<label>Ciudad</label>
<div id='div_ciudades'></div>
</li>
</ol>
</fieldset>
<?php echo Form::submit('Agregar');?>
<?php echo Form::close(); ?>
<script type='text/javascript'>
$("#clientes_regiones_id").change(function(){
var regiones_id = $('#clientes_regiones_id').val();
$.ajax({
type: "POST",
url: "<?php echo PUBLIC_PATH . 'clientes/getComunas/'; ?>",
data: "regiones_id=" + regiones_id,
success: function(html){
$("#div_comunas").html(html);
}
});
});
</script>
- Vista getComunas.phtml
<?php
echo Form::dbSelect("clientes.comunas_id", 'nombre', array('comunas','buscar',$regiones_id), '- Seleccione -');
?>
<script type='text/javascript'>
$("#clientes_comunas_id").change(function(){
var comunas_id = $('#clientes_comunas_id').val();
$.ajax({
type: "POST",
url: "<?php echo PUBLIC_PATH . 'clientes/getCiudades/'; ?>",
data: "comunas_id=" + comunas_id,
success: function(html){
$("#div_ciudades").html(html);
}
});
});
</script>
- Vista getCiudades.phtml
<?php
echo Form::dbSelect('clientes.ciudades_id', 'nombre', array('ciudades', 'buscar', $comunas_id), '- Seleccione -');
?>