Académique Documents
Professionnel Documents
Culture Documents
<?php
defined(‘BASEPATH’) OR exit(‘No direct script access allowed’);
class modeloBebida extends CI_Model {
public function getBebidas(){
$bebidas = $this->db->get(‘bebida’);
if($bebidas->num_rows()>0){
return $bebidas->result();
}
}
}
?>
Es el momento de pasar a la vista. veamos la por partes, para empezar es necesario
indicar que se usará jquery, remarcado en rojo podeis ver la parte donde enlazamos con la
ultima version de jquery.
El script marcado en azul lo veremos despues, vamos a centrarnos primero en recibir los
datos de nuestros tipos de bebidas y mostrarlos en un select, creamos el select y hacemos
un foreach de los datos recibidos, y lo vamos mostrando, el id de la bebida lo asociamos al
value y el nombre de la bebida lo expulsamos para que sea lo que vea el usuario.
Ya tenemos el primer select. Es importante que ademas de un name, lleve un id, que es al
que vamos a llamar desde nuestro script. Para el select que depende de este solo nos
tenemos que crear un select en este caso con id=”marca”.
Ahora vamos a ver el script, el código esta marcado en azul.
Le indicamos que cuando nuestro select con id bebida cambié seleccione el valor
escogido, lo envie por el metodo post a la función de nuestro controlador que llamará a
nuestro modelo y le devolverá las marcas asociadas al tipo de bebida y al retornarlo, esos
datos los meta en nuestro select con id marca.
<!DOCTYPE html>
<html lang=“en”>
<head>
<meta charset=“utf-8”>
<script src=”https://code.jquery.com/jquery-3.2.1.min.js”></script>
<script type=“text/javascript”>
$(document).ready(function() {
$(“#bebida”).change(function() {
$(“#bebida option:selected”).each(function() {
bebida = $(‘#bebida’).val();
$.post(“<?php echo base_url(); ?>index.php/misBebidas/selectMarca”, {
bebida : bebida
}, function(data) {
$(“#marca”).html(data);
});
});
});
});
</script>
</head>
<body>
<select name=”bebida” id=“bebida”>
<?php
foreach($bebidas as $bb){
?>
<option value=“<?=$bb -> ID_BEBIDA ?>“><?=$bb -> NOMBRE_BEBIDA ?></option>
<?php
}
?>
</select>
echo "<option
value='".$marca['ID_MARCA']."'>".$marca['NOMBRE_MARCA']."</opction>
";
}
}
Una vez creada nos vamos a nuestro modelo, en este caso modeloBebida.php y creamos
la funcion getMarcas que recibirá una varible diciendonos el tipo de bebida seleccionada,
consultamos a la base de datos y devolvemos el resultado que como vimos arriba recibirá
el controlador y generara las opciones con ellos
public function getMarcas($tipo){
$this->load->database();
$consulta=”SELECT * FROM MARCA WHERE ID_BEBIDA=$tipo”;
$resultado=$this->db->query($consulta)->result_array();
return $resultado;
}
Hasta aqui este pequeño manual de como crear select dependientes, espero que os sirva
de ayuda.
Si teneis alguna duda comentad
https://www.ayudafacil.com/select-dependientes-en-php-usando-codeigniter-con-jquery/
Espero que el que las personas que estén viendo esto por lo menos
sepan como crear el proyecto con codeIgniter porque no pararemos a
explicarlo puesto que está explicado en 3 o 4 publicaciones de la web,
así que lo primero será crear el proyecto al cuál podemos llamar
selects_con_ajax por ejemplo y seguido creamos la vista, vamos a ello.
El archivo .htaccess para quitar el
index.php
Para que trabaje nuestra aplicación en codeIgniter si tener que poner
el index.php debemos crear un archivo .htaccess y colocarlo en la raíz
del proyecto y dentro colocamos lo siguiente:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /selects_con_ajax/index.php/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /selects_con_ajax/index.php
</IfModule>
Creamos la vista
Primero deberemos crear una vista a la que podemos llamar
micombo_view.php y dentro colocamos el código html que necesitamos.
</head>
<body>
<label>Selecciona una categoría</label>
<select name="categoria" id="categoria">
<option value="">Selecciona una categoría</option>
<option value="compraventa">Compra y venta</option>
<option value="inmobiliaria">Mundo Inmobiliario</option>
<option value="motor">Mundo motor</option>
<option value="empleo">Empleo</option>
<option value="consolas-videojuegos">Consolas y videojuegos</option>
<option value="servicios">Servicios</option>
<option value="mascotas">Mascotas</option>
<option value="contactos">Contactos</option>
<option value="antiguedades">Antigüedades</option>
</select>
<label>Selecciona una subcategoría</label>
<select name="subcategoria" id="subcategoria">
<option value="">Selecciona una subcategoría</option>
</select>
</body>
</html>>
Bueno, aquí lo primero que hacemos es crear un campo select con las
categorías ya cargadas y a partir de ahí creamos otro que está
esperando a que escojamos una para poder llenarse con los datos que le
pidamos.
En el head si nos fijamos veremos que hemos creado una función ajax
javascript que hace lo siguiente:
$("#categoria").change(function ()
Con todo esto ya tenemos todo nuestro html y nuestro javascript, solo
nos falta crear el controlador y la función llenacombo, que será la que
nos rellene el select con id subcategoría, vamos a ello.
function index()
{
$this->load->view('micombo_view');
}
function llenacombo()
{
$options="";
if ($_POST["micategoria"]== 'compraventa')
{
$options= '
<option value="bebes-ninos">Artículos de bebes y niños</option>
<option value="sonido">Sonido</option>
<option value="consolas-videojuegos">Consolas y videojuegos</option>
<option value="moviles">Móviles</option>
<option value="libros">Libros</option>
<option value="muebles">Muebles</option>
<option value="electrodomesticos">Electrodomésticos</option>
<option value="articulos-informatica">Artículos de informática</option>
<option value="tv-video">Televisión y video</option>
<option value="reproductores-dvd">Reproductores dvd</option>
<option value="video-camaras">Video cámaras</option>
';
}
if ($_POST["micategoria"]=='inmobiliaria') {
$options= '
<option value="venta-pisos">Vendo piso</option>
<option value="venta-casas">Vendo casa</option>
<option value="venta-terrenos">Vendo terreno</option>
<option value="venta-locales">Vendo local</option>
<option value="venta-lofts">Vendo loft</option>
<option value="alquiler-pisos">Alquilo piso</option>
<option value="alquiler-habitaciones">Alquilo habitación</option>
<option value="alquiler-vacaciones">Alquilo para vacaciones</option>
<option value="alquiler-casas">Alquilo casa</option>
<option value="alquiler-locales">Alquilo local</option>
<option value="alquiler-loft">Alquilo loft</option>
';
}
if ($_POST["micategoria"]=='motor') {
$options= '
<option value="coches">Coches</option>
<option value="coches-sin-carnet">Coches sin carné</option>
<option value="motocicletas">Motocicletas</option>
<option value="caravanas">Caravanas</option>
<option value="furgonetas">Furgonetas</option>
<option value="camiones">Camiones</option>
<option value="accesorios">Accesorios</option>
<option value="ciclomotores">Ciclomotores</option>
<option value="todo-terrenos">Todo terrenos</option>
<option value="quads">Quads</option>
<option value="karts">Karts</option>
';
}
if ($_POST["micategoria"]=='servicios') {
$options= '
<option value="mudanzas">Mudanzas</option>
<option value="reparaciones">Reparaciones</option>
<option value="limpieza">Limpieza</option>
<option value="informatica">Informática</option>
<option value="canguros">Canguros</option>
<option value="cuidados-animales">Cuidados animales</option>
<option value="horoscopo-tarot">Horóscopo/Tarot</option>
';
}
if ($_POST["micategoria"]=='empleo') {
$options= '
<option value="abogados">Abogados</option>
<option value="administrativos">Administrativos</option>
<option value="comerciales">Comerciales</option>
<option value="freelance">Freelance</option>
<option value="informatica">Informática</option>
<option value="voluntarios">Voluntarios</option>
<option value="atencion-cliente">Atención al cliente</option>
<option value="hosteleria">Hosteleria</option>
<option value="construccion">Construcción</option>
<option value="transportistas">Transportistas</option>
<option value="vigilantes">Vigilantes</option>
<option value="mensajeros">Mensajeros</option>
';
}
if ($_POST["micategoria"]=='mascotas') {
$options= '
<option value="perros">Perros</option>
<option value="gatos">Gatos</option>
<option value="peces">Peces</option>
<option value="roedores">Roedores</option>
<option value="pajaros">Pájaros</option>
<option value="tortugas">Tortugas</option>
<option value="camaleones">Camaleones</option>
<option value="caballos">Caballos</option>
<option value="otros-animales">Otros animales</option>
';
}
if ($_POST["micategoria"]=='contactos') {
$options= '
<option value="chica-busca-chico">Chica busca chico</option>
<option value="chica-busca-chica">Chica busca chica</option>
<option value="chico-busca-chica">Chico busca chica</option>
<option value="chico-busca-chico">Chico busca chico</option>
<option value="relaciones-ocasionales">Relaciones esporádicas</option>
<option value="eroticos-profesionales">Profesionales</option>
';
}
if ($_POST["micategoria"]=='antiguedades') {
$options= '
<option value="monedas">Monedas</option>
<option value="cuadros">Cuadros</option>
<option value="sellos">Sellos</option>
<option value="cromos">Cromos</option>
<option value="mobiliario">Mobiliario</option>
<option value="relojes">Relojes</option>
<option value="otras-antiguedades">Otras antigüedades</option>
';
}
if ($_POST["micategoria"]=='consolas-videojuegos') {
$options= '
<option value="gamecube">Game cube</option>
<option value="gameboy-advance">Gameboy advance</option>
<option value="gameboy">Gameboy</option>
<option value="nintendo-wii">Nintendo wii</option>
<option value="nintendo-ds">Nintendo ds</option>
<option value="nintendo-64">Nintendo 64</option>
<option value="dreamcast">Dreamcast</option>
<option value="psp">Psp</option>
<option value="playstation1">Playstation 1</option>
<option value="playstation2">Playstation 2</option>
<option value="playstation3">Playstation 3</option>
<option value="xbox">Xbox</option>
';
}
echo $options;
}
}
https://www.uno-de-piera.com/combos-dependientes-con-codeigniter-y-ajax/
Lo que quiero hacer es lo siguiente, la ingresar un código en un input, se verifica que exista en la base de datos, si ese
código existe me coloca la descripción de ese código en otro inputs.
CODIGO HTML
<div class="col-sm-2">
<div class="form-line">
<label class="form-label">Aduana:</label>
</div>
<div class="help-info">Teledespacho</div>
</div>
</div>
<div class="col-sm-3">
<div class="form-line">
<label class="form-label"></label>
</div>
</div>
</div>
</div>
JAVASCRIPT
$("#aduana").change(function() {
$("#aduana").each(function() {
aduana = $('#aduana').val();
$.post("http://localhost/betania/tramite/verificAduana", {
aduana : aduana
}, function(data) {
$("#nombreAduana").html(data);
});
});
})
FUNCION DEL CONTROLADOR
public function verificAduana()
//$options = "";
if($this->input->post('aduana'))
controlador");</script>';
$aduana = $this->input->post('aduana');
where codPais=='.$aduana.'')->result();
}
Lo que no he podido realizar es que desde el javascript pueda ingresar a la función del controlador y no sé cómo
retornar el valor que encuentre en la base de datos al input nombreAduana
He aplicado un código similar que encontré en la web donde hacen lo mismo solo que con dos select.
lo que puedes hacer es verificar el resultado del data, como por ejemplo en el controlador:
if($check == true){
echo 1;
}else{
echo 0;
}
Entonces el resultado de data será 1 o 0.
$("#aduana").change(function() {
$("#aduana").each(function() {
aduana = $('#aduana').val();
$.post("http://localhost/betania/tramite/verificAduana", {
aduana : aduana
}, function(data) {
if(data == 1){
$("#nombreAduana").html(data);
}
else{
});
});
})
if($this->input->post('aduana'))
$aduana = $this->input->post('aduana');
foreach($check->result() as $fila)
if(isset($fila)){ ?>
>nombreAduana?></h5>
<?php
}
else{
?>
<?php
}
codigo Js (archivo externo que lo he llamado prueba.js
$(function(){
$("#aduana").change(function() {
$("#aduana").each(function() {
aduana = $('#aduana').val();
function(data) {
document.getElementById("aduana").value=null;
document.getElementById("aduana").focus();
$("#nombreAduana").html(data);
else{
$("#nombreAduana").html(data);
});
});
});
});
Codigo HTML
<div class="col-sm-2">
<div class="form-line">
<label class="form-label">Aduana:</label>
</div>
<div class="help-info">Teledespacho</div>
</div>
</div>
</div>
En síntesis lo que hice fue, cuando cambia el valor de input “aduana”, compruebo si ese código existe en la base de
datos. Si el valor existe me retorna el nombre de aduana y se la asigno a una etiqueta <h5> que posteriormente se la
asigno al div “nombreaduana”, y lo cargo desde el JavaScript con $("#nombreAduana").html(data);
https://www.lawebdelprogramador.com/foros/Codeigniter/1620820-Inputs-dependientes-
con-codeigniter.html
Cómo crear un select dinámico
Advertencia : Parámetro 2 a wp_hide_post_Public :: query_posts_join
() espera que sea una referencia, valor dado
en /home/dicas/public_html/wp-includes/class-wp-hook.php en la
línea 286
UPDATE 10/03/2017
El primer paso es crear una base de datos con las respectivas tablas
ORDENADOR
DE TELEFONÍA
ELECTRODOMÉSTICOS
JUEGOS
PRODUTOS_ID_DEPARTAMENTO: 1
PRODUTOS_NOME: MOUSE
PRODUTOS_ID_DEPARTAMENTO: 1
PRODUTOS_NOME: TECLADO
PRODUTOS_ID_DEPARTAMENTO: 1
PRODUTOS_NOME: MONITOR
PRODUTOS_ID_DEPARTAMENTO: 1
PRODUTOS_NOME: HD
PRODUTOS_ID_DEPARTAMENTO: 1
PRODUTOS_NOME: MEMORIA
PRODUTOS_ID_DEPARTAMENTO: 1
PRODUTOS_NOME: FUENTE
PRODUTOS_ID_DEPARTAMENTO: 2
PRODUTOS_NOME: BATERÍA
PRODUTOS_ID_DEPARTAMENTO: 2
PRODUTOS_NOME: CABLE DE DATOS
PRODUTOS_ID_DEPARTAMENTO: 2
PRODUTOS_NOME: DISPLAY
PRODUTOS_ID_DEPARTAMENTO: 3
PRODUTOS_NOME: FRIGORÍFICO
PRODUTOS_ID_DEPARTAMENTO: 3
PRODUTOS_NOME: ROPA WASHER
PRODUTOS_ID_DEPARTAMENTO: 4
PRODUTOS_NOME: PLAYSTATION
PRODUTOS_ID_DEPARTAMENTO: 4
PRODUTOS_NOME: WII
PRODUTOS_ID_DEPARTAMENTO: 4
PRODUTOS_NOME: XBOX
</select>
</p>
<p>
</select>
</p>
parent::__construct();
$this->db->order_by("departamentos_nome", "asc");
$consulta = $this->db->get("departamentos");
return $consulta;
$this->load->model("m_departamentos_produtos");
$departamentos = $this->m_departamentos_produtos->retorna_departamentos();
$variaveis['options_departamentos'] = $option;
$this->load->view('welcome_message', $variaveis);
Y justo debajo de esta línea, pero antes de cerrar la etiqueta </ head>,
coloque nuestra función que va a buscar los datos en la base de
datos.
function busca_produtos(id_departamento){
alert(id_departamento);
Lo que vamos a hacer es una consulta vía ajax para una función
dentro del controlador de bienvenida donde pasar el id_departamento
como parámetro para hacer una búsqueda en la tabla de
productos. Entonces, sólo los productos de ese departamento deben
ser devueltos. A continuación se muestra el código de función:
var base_url = '<? echo base_url() ?>';
function busca_produtos(id_departamento){
$.post(base_url+"index.php/welcome/busca_produtos_by_departamento", {
id_departamento : id_departamento
}, function(data){
$('#produtos').html(data);
});
$id_departamento = $this->input->post("id_departamento");
$this->db->where("produtos_id_departamento", $id_departamento);
$this->db->order_by("produtos_nome", "asc");
$consulta = $this->db->get("produtos");
return $consulta;
$this->load->model("m_departamentos_produtos");
$produtos = $this->m_departamentos_produtos->retorna_produtos_by_departamento();
echo $option;
Abrazos.
https://www.dicascodeigniter.com.br/como-criar-um-select-dinamico/
select_dinamico_v2
Modelo: jcombo_m.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Jcombo_m extends
CI_model{ function __construct(){ parent::__construct(); $this->load-
>database(); } public function get_paises(){ $query = $this->db ->query("SELECT
id_country AS id, country_name AS descripcion FROM countries ORDER BY descripcion
ASC"); if($query->num_rows()>0){ $arrDatos = array(); foreach($query-
>result() as $row){ $arrDatos[] = array( htmlspecialchars($row-
>id,ENT_QUOTES), htmlspecialchars($row-
>descripcion,ENT_QUOTES) ); } $query->free_result(); //
devolver los datos en json return json_encode($arrDatos); }else{ return
json_encode(array(1=> array("-- no se encontraron registros.."))); } } public function
get_ciudades($id){ if(empty($id) or !ctype_digit($id)) return false; $query = $this-
>db ->query("SELECT id_city AS id, city_name AS descripcion FROM cities WHERE
id_country=? ORDER BY descripcion ASC",array($id)); if($query-
>num_rows()>0){ $arrDatos = array(); foreach($query->result() as
$row){ $arrDatos[] = array( htmlspecialchars($row-
>id,ENT_QUOTES), htmlspecialchars($row-
>descripcion,ENT_QUOTES) ); } $query->free_result(); // devolver
los datos en json return json_encode($arrDatos); }else{ return
json_encode(array(1=> array("-- no se encontraron registros.."))); } } public function
get_zonas($id){ if(empty($id) or !ctype_digit($id)) return false; $query = $this-
>db ->query("SELECT id_zone AS id, zone_name AS descripcion FROM zones WHERE
id_city=? ORDER BY descripcion ASC",array($id)); if($query-
>num_rows()>0){ $arrDatos = array(); foreach($query->result() as
$row){ $arrDatos[] = array( htmlspecialchars($row-
>id,ENT_QUOTES), htmlspecialchars($row-
>descripcion,ENT_QUOTES) ); } $query->free_result(); // devolver
los datos en json return json_encode($arrDatos); }else{ return
json_encode(array(1=> array("-- no se encontraron registros.."))); } }}
Controlador: jcombo_c.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Jcombo_c extends
CI_Controller { function __construct() { parent::__construct(); $this->load-
>model('jcombo_m','modelo'); $this->load->helper('url'); $this->load-
>helper('form'); } public function index($submit=false){ $arrDatos['sTitulo'] = 'JCombo
en CodeIgniter'; $arrDatos['submit'] = $submit; // si se envio el
formulaario.. if($submit){ $arrDatos['id_pais'] = $this->input-
>post('selPaises'); $arrDatos['id_ciudad'] = $this->input-
>post('selCiudades'); $arrDatos['id_zona'] = $this->input->post('selZonas'); } $this-
>load->view('jcombo_v',$arrDatos); } public function get_paises(){ # para este caso
particular, # es necesario imprimir aqui en el controlador.. echo $this->modelo-
>get_paises(); } public function get_ciudades($id){ echo $this->modelo-
>get_ciudades($id); } public function get_zonas($id){ echo $this->modelo-
>get_zonas($id); } } /* End of file jcombo_c.php */ /* Location: ./application/controllers/jcombo_c.php */
Vista: jcombo_v.php
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title><?php echo $sTitulo;
?></title> <!-- incluimos el plugin (jcombo) y el jquery--> <script type="text/javascript" src="<?php
echo base_url(); ?>/js/jquery.js"></script> <script type="text/javascript" src="<?php echo base_url();
?>/js/jcombo/jquery.jCombo.min.js"></script> <!-- configuramos el plugin--> <script
type="text/javascript"> $(function() { // paises es el primer select a llenar<pre
class='brush:xml'> $("#selPaises").jCombo( "<?php echo base_url();
?>index.php/jcombo_c/get_paises",{ selected_value: "<?php echo empty($id_pais) ? 0 : $id_pais;
?>", initial_text: "-- seleccione un país --" }); $("#selCiudades").jCombo("<?php echo
base_url(); ?>index.php/jcombo_c/get_ciudades/",{ parent: "#selPaises", // combo
padre selected_value: "<?php echo empty($id_ciudad) ? 0 : $id_ciudad; ?>", initial_text: "--
seleccione una ciudad --" }); $("#selZonas").jCombo("<?php echo base_url();
?>index.php/jcombo_c/get_zonas/",{ parent: "#selCiudades", selected_value: "<?php echo
empty($id_zona) ? 0 : $id_zona; ?>", initial_text: "-- seleccione una zona --
" }); }); </script> <style> #form_ppal{ margin: 0 auto; border: 1px dashed
blue; padding: 3px; width: 500px; } #form_ppal p{ width: 100%; font-weight:
bold; } #form_ppal p label{ width: 70px; font-weight: bold; float: left; text-
align:right; padding-right:3px; margin-top:3px; } </style> </head> <body> <?php echo
form_open('jcombo_c/index/1',array('id'=>'form_ppal'));// <form .. echo '<p>',form_label('Paises:
') ,form_dropdown('selPaises',array(),'','id="selPaises"'),'</p>'; echo '<p>',form_label('Ciudades:
') ,form_dropdown('selCiudades',array(),'','id="selCiudades"'),'</p>'; echo '<p>',form_label('Zonas:
') ,form_dropdown('selZonas',array(),'','id="selZonas"'),'</p>'; echo
'<p>',form_label('') ,form_submit(array('id'=>'btEnviar','value'=>'Enviar')),'</p>'; // si el formulario se
recargo, mostramos los datos enviados.. if ($submit){ echo '<hr/><p>id_pais: ',$id_pais,'</p>'; echo
'<p>id_pais: ',$id_ciudad,'</p>'; echo '<p>id_pais: ',$id_zona,'</p>'; } echo form_close();// </form> ?>
</body> </html>
La explicación del plugin está en el post citado, el script de la base de datos se encuentra en el paquete
de descarga oficial. La configuración de la base de datos es igual que siempre..
application/config/database.php
Para el ejemplo use MySQl, pero esto no es limitante, puedes usar cualquier otro manejador de base de
datos.
https://cassianinet.blogspot.com/2012/04/ya-habiamos-hablado-del-jcombo-
plugin.html#axzz5T8mQWwa0
https://github.com/cardeol/jquery-jcombo
Uno de los casos habituales dentro de un desarrollo es la necesidad de anidar, agrupar, enlazar combos,
entiéndase por combos los elementos de tipo SELECT. Ajax es la manera más profesional de
trabajarlo, disponemos de JQuery para complementar lo que con solo PHP por ejemplo, no podemos
conseguir sin que se vuelva tedioso si tienes muchos campos en el mismo formulario.
jCombo es un plugin de JQuerydesarrollado por Carlos De Oliveira, para selects simples y anidados.
esta extensión, simplifica el proceso de obtener data en combos SELECT, aún si están anidados o no. La
única condición es obtener los campos de la base de datos consecutivamente creando pares de
[valor][texto] en formato JSON. No obstrusivo, sin efectos ni estilos. Este componente es un intento para
obtener combos anidados de la forma mas rápida posible.
Uso:
$("#selCiudades").jCombo("funciones.php?funcion=get_ciudades&id=",{
parent: "#selPaises" // combo padre
});
$("#selZonas").jCombo("funciones.php?funcion=get_zonas&id=",{
parent: "#selCiudades"
});
});
</script>
¿Como funciona?
para llenar el combo basta con llamar al archivo que generara los datos e indicar a que objeto se le
asignaran:
$("select[name='paises']").jCombo("get_paises.php");
el plugin trabaja con el formato JSON, así que es en ese formato en el que debemos devolverlos,
podemos trabajar con JSON en PHP sin ningún problema. Puedes por ejemplo, llamar a un
archivo PHP diferente que te devuelva los datos para cargar cada select o llamar a uno solo que devuelva
los valores de acuerdo al valor pasado por parámetro.
$("#selPaises").jCombo("funciones.php?funcion=get_paises",{});
$("#selCiudades").jCombo("funciones.php?funcion=get_ciudades&id="{ ...
$("#selZonas").jCombo("funciones.php?funcion=get_zonas&id=",{ ...
voy a dejar un ejemplo para el contenido funciones.php y como gestiona los valores recibidos, para
generar los datos destinados a la carga de cada select.
<?php
// indicamos que la respuesta tendra el formato JSON
header('Content-type: application/json');
echo get_paises();
break;
case 'get_ciudades':
echo get_ciudades($_GET['id']);
break;
case 'get_zonas':
echo get_zonas($_GET['id']);
break;
- parent: elemento SELECT del cual se deben obtener los datos (combo padre).
- initial_text: mensaje por defecto al seleccionar una opción. Si se coloca un valor vacío ('') entonces no
se mostrará ningún texto.
- selected_value: preselecciona el combo en el valor colocado.
- parent_value: establece la carga inicial del elemento padre (sólo cuando el elemento está en cascada).
https://cassianinet.blogspot.com/2011/11/combos-anidados-con-
jquery.html?showComment=1326337380622#axzz5T8mQWwa0
http://www.antoniorios.net/blog/?p=346
https://github.com/antonioriosm/ci_listas_js
https://github.com/antonioriosm/ci_listas
Modelo: jcombo_m.php
function __construct(){
parent::__construct();
$this->load->database();
}
$query = $this->db
->query("SELECT id_country AS id, country_name AS descripcion
FROM countries ORDER BY descripcion ASC");
if($query->num_rows()>0){
$arrDatos = array();
foreach($query->result() as $row){
$arrDatos[] = array(
htmlspecialchars($row->id,ENT_QUOTES),
htmlspecialchars($row->descripcion,ENT_QUOTES)
);
}
$query->free_result();
$query = $this->db
->query("SELECT id_city AS id, city_name AS descripcion
FROM cities WHERE id_country=?
ORDER BY descripcion ASC",array($id));
if($query->num_rows()>0){
$arrDatos = array();
foreach($query->result() as $row){
$arrDatos[] = array(
htmlspecialchars($row->id,ENT_QUOTES),
htmlspecialchars($row->descripcion,ENT_QUOTES)
);
}
$query->free_result();
$query = $this->db
->query("SELECT id_zone AS id, zone_name AS descripcion
FROM zones WHERE id_city=?
ORDER BY descripcion ASC",array($id));
if($query->num_rows()>0){
$arrDatos = array();
foreach($query->result() as $row){
$arrDatos[] = array(
htmlspecialchars($row->id,ENT_QUOTES),
htmlspecialchars($row->descripcion,ENT_QUOTES)
);
}
$query->free_result();
Controlador: jcombo_c.php
function __construct() {
parent::__construct();
$this->load->model('jcombo_m','modelo');
$this->load->helper('url');
$this->load->helper('form');
}
// si se envio el formulaario..
if($submit){
$arrDatos['id_pais'] = $this->input->post('selPaises');
$arrDatos['id_ciudad'] = $this->input-
>post('selCiudades');
$arrDatos['id_zona'] = $this->input->post('selZonas');
}
$this->load->view('jcombo_v',$arrDatos);
}
echo $this->modelo->get_ciudades($id);
}
echo $this->modelo->get_zonas($id);
}
}
/* End of file jcombo_c.php */
/* Location: ./application/controllers/jcombo_c.php */
Vista: jcombo_v.php
function __construct() {
parent::__construct();
$this->load->model('jcombo_m','modelo');
$this->load->helper('url');
$this->load->helper('form');
}
// si se envio el formulaario..
if($submit){
$arrDatos['id_pais'] = $this->input->post('selPaises');
$arrDatos['id_ciudad'] = $this->input-
>post('selCiudades');
$arrDatos['id_zona'] = $this->input->post('selZonas');
}
$this->load->view('jcombo_v',$arrDatos);
}
echo $this->modelo->get_ciudades($id);
}
echo $this->modelo->get_zonas($id);
}
}
/* End of file jcombo_c.php */
/* Location: ./application/controllers/jcombo_c.php */
Vista: jcombo_v.php
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title><?php echo $sTitulo; ?></title>
<style>
#form_ppal{
margin: 0 auto;
border: 1px dashed blue;
padding: 3px;
width: 500px;
}
#form_ppal p{
width: 100%;
font-weight: bold;
}
#form_ppal p label{
width: 70px;
font-weight: bold;
float: left;
text-align:right;
padding-right:3px;
margin-top:3px;
}
</style>
</head>
<body>
<?php
echo form_open('jcombo_c/index/1',array('id'=>'form_ppal'));// <form
..
echo '<p>',form_label('Paises: ')
,form_dropdown('selPaises',array(),'','id="selPaises"'),'</p
>';
echo '<p>',form_label('')
,form_submit(array('id'=>'btEnviar','value'=>'Enviar')),'</p>';
La explicación del plugin está en el post citado, el script de la base de datos se encuentra en el paquete
de descarga oficial. La configuración de la base de datos es igual que siempre..
application/config/database.php
Para el ejemplo use MySQl, pero esto no es limitante, puedes usar cualquier otro manejador de base de
datos.
https://cassianinet.blogspot.com/2012/04/ya-habiamos-hablado-del-jcombo-
plugin.html#axzz5T8mQWwa0
Modelo: jcombo_m.php
(clic para mostrar/ocultar código).
<?php if ( ! defined('BASEPATH')) exit('No direct script access
allowed');
function __construct(){
parent::__construct();
$this->load->database();
}
$query = $this->db
->query("SELECT id_country AS id, country_name AS descripcion
FROM countries ORDER BY descripcion ASC");
if($query->num_rows()>0){
$arrDatos = array();
foreach($query->result() as $row){
$arrDatos[] = array(
htmlspecialchars($row->id,ENT_QUOTES),
htmlspecialchars($row->descripcion,ENT_QUOTES)
);
}
$query->free_result();
$query = $this->db
->query("SELECT id_city AS id, city_name AS descripcion
FROM cities WHERE id_country=?
ORDER BY descripcion ASC",array($id));
if($query->num_rows()>0){
$arrDatos = array();
foreach($query->result() as $row){
$arrDatos[] = array(
htmlspecialchars($row->id,ENT_QUOTES),
htmlspecialchars($row->descripcion,ENT_QUOTES)
);
}
$query->free_result();
$query = $this->db
->query("SELECT id_zone AS id, zone_name AS descripcion
FROM zones WHERE id_city=?
ORDER BY descripcion ASC",array($id));
if($query->num_rows()>0){
$arrDatos = array();
foreach($query->result() as $row){
$arrDatos[] = array(
htmlspecialchars($row->id,ENT_QUOTES),
htmlspecialchars($row->descripcion,ENT_QUOTES)
);
}
$query->free_result();
Controlador: jcombo_c.php
(clic para mostrar/ocultar código).
<?php if ( ! defined('BASEPATH')) exit('No direct script access
allowed');
function __construct() {
parent::__construct();
$this->load->model('jcombo_m','modelo');
$this->load->helper('url');
$this->load->helper('form');
}
public function index($submit=false){
// si se envio el formulaario..
if($submit){
$arrDatos['id_pais'] = $this->input->post('selPaises');
$arrDatos['id_ciudad'] = $this->input->post('selCiudades');
$arrDatos['id_zona'] = $this->input->post('selZonas');
}
$this->load->view('jcombo_v',$arrDatos);
}
echo $this->modelo->get_ciudades($id);
}
echo $this->modelo->get_zonas($id);
}
}
/* End of file jcombo_c.php */
/* Location: ./application/controllers/jcombo_c.php */
Vista: jcombo_v.php
<style>
#form_ppal{
margin: 0 auto;
border: 1px dashed blue;
padding: 3px;
width: 500px;
}
#form_ppal p{
width: 100%;
font-weight: bold;
}
#form_ppal p label{
width: 70px;
font-weight: bold;
float: left;
text-align:right;
padding-right:3px;
margin-top:3px;
}
</style>
</head>
<body>
<?php
echo form_open('jcombo_c/index/1',array('id'=>'form_ppal'));// <form ..
echo '<p>',form_label('Paises: ')
,form_dropdown('selPaises',array(),'','id="selPaises"'),'</p
>';
echo '<p>',form_label('')
,form_submit(array('id'=>'btEnviar','value'=>'Enviar')),'</p>';
// si el formulario se recargo, mostramos los datos enviados..
if ($submit){
echo '<hr/><p>id_pais: ',$id_pais,'</p>';
echo '<p>id_pais: ',$id_ciudad,'</p>';
echo '<p>id_pais: ',$id_zona,'</p>';
}
La explicación del plugin está en el post citado, el script de la base de datos se encuentra
en el paquete de descarga oficial. La configuración de la base de datos es igual que
siempre..
application/config/database.php
$db['default']['hostname'] = 'localhost';// mi servidor
$db['default']['username'] = 'root';// mi usuario en MySQl
$db['default']['password'] = '1234';// el password de mi usuario, si no
tiene no se coloca..
$db['default']['database'] = 'ci_jcombo';// el nombre de mi base de datos
de ejemplo
$db['default']['dbdriver'] = 'mysql';
Para el ejemplo use MySQl, pero esto no es limitante, puedes usar cualquier otro manejador
de base de datos.
http://shinigamiwhite.blogspot.com/2012/04/jcombo-con-codeigniter.html
http://www.rephp.com/codeigniter-menu-desplegable-dependiente-con-jquery-y-ajax-
post.html
https://github.com/eboominathan/Dependent-Dropdown-in-Codeigniter-3.0.3
http://www.davidrojas.net/index.php/desarrollo-web/screencast-tutorial-ajax-con-jquery-en-
codeigniter/
En el código del controlador debemos por ahora agregar la carga de nuestra vista y la carga de
el driver para base de datos y el uri helper que nos ayudara.
Código de controlador inicial:
<?php if ( ! defined('BASEPATH')) exit('No direct script access
allowed');
En el código de vista solo debemos poner el enlace a el css y js de jquery ui, para facilitarnos la
vida nos ayudaremos con la función base_uri que nos permitirá darle una ruta absoluta.
Código vista:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
<title>jQuery UI Autocomplete Ejemplo</title>
<link type="text/css" href="<?php echo base_url(); ?>css/dark-
hive/jquery-ui-1.8.10.custom.css" rel="stylesheet" />
<script type="text/javascript" src="<?php echo base_url();
?>js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="<?php echo base_url();
?>js/jquery-ui-1.8.10.custom.min.js"></script>
<script type="text/javascript">
</script>
</head>
<body>
</body>
</html>
Y por ultimo crearemos una pequeña Base de datos de usuarios con solo un id y nombre de
usuario, así:
Lo ultimo de este paso es configurar nuestra base de datos y ya debería cargar una pagina en
blanco.
El codeigniter trae una clase ya echa y precargada para lo que son los input, esta libreria
incluye funciones muy utiles:
Que generaria algo asi "SELECT `id`, `user` as value FROM (`usuarios`) WHERE user` LIKE
'%$buscar%'"
Ahora solo debemos verificar que la respuestasea mayor que 0, pero en ves de usar el clasico
mysql_num_rows usaremos $query->num_rows() > 0, y para listar los resultados en ves de
while ($row = mysql_fetch_array($result) ) usaremos foreach ($query->result_array() as $row).
y por ultimo usamos la funcion json_encode para pasar nuestro array al formato json.
http://sosinformatico.blogspot.com/2011/03/tutorial-jquery-ui-autocomplete-y.html
https://www.youtube.com/results?search_query=webslesson+codeigniter
<script type=text/javascript>
$(document).ready(function(){
$('#senf').on('change', function(){
var senf_id = $(this).val();
if(senf_id == '')
{
$('#raste').prop('disabled', true);
}
else
{
$('#raste').prop('disabled', false);
$.ajax({
url:<?php echo base_url() ?>index.php/shoppings/get_subgr
oup/,
type: POST,
data: {'senf_id' : senf_id},
dataType: 'json',
success: function(data){
alert('okkk');
},
error: function(){
alert('Error occur...!!');
}
});
}
});
});
</script>
<div class=form-group >
<label for=group_name class=control-label col-lg-2>group 1</label>
<select id=senf name=group>
<option value= selected=selected>select</option>
<?php
foreach ($get_groups as $value) {
$group_id = $value['group_shop_id'];
$group_name = $value['group_shop_name'];
?>
<option value=<?php echo $group_id; ?>> <?php echo $group_name; ?> </opti
on>
<?php } ?>
</select>
CONTROLADOR:
MODELO:
1 respuestas
prueba esto
Controlador
AJAX
function get_data()
{
var id = $('#senf').val()
datana= 'id='+id
$.ajax({
type: 'POST',
url: '<?=base_url()?>your_controller/ajax_get_subgroup',
data: datana,
error: function(data) {
alert('Failed');
},
success: function(data)
{
$('#raste').html(data)
}
})
}
Puntos de vista
https://wiki.askprime.space/blog/tutorial-codeigniter