elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [TUTE] Clase para generar automaticamente select(combos) dependientes multinivel
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [TUTE] Clase para generar automaticamente select(combos) dependientes multinivel  (Leído 3,296 veces)
Graphixx


Desconectado Desconectado

Mensajes: 1.336


Full Stack Developer


Ver Perfil WWW
[TUTE] Clase para generar automaticamente select(combos) dependientes multinivel
« en: 28 Diciembre 2012, 23:37 pm »


Como se que para un programador es un dolor de cabeza encontrar un buen codigo y que se entienda de como hacer combos dependientes, voy a explicar como hacer el tipico PAIS, ESTADO, CIUDAD/MUNICIPIO.

Lo primero es crear la base de datos con los paises, estados y ciudades del mundo, la cual adjunto en el comprimido se llama: mundo.sql

Dentro de la carpeta classes hay un archivo llamado: DataAccess.class donde debes configurar la conexion a tu bd.

Despues viene el formulario con los tres combos dependientes el cual consta de 3 partes de codigo:
La primera parte con las librerias que se invocan para crear los combos.
Código:
<?php
require 'classes/Form.class.php';
require 'classes/DataAccess.class.php';
require 'classes/ElementsFromDB.class.php';
require 'classes/LinkedSelect.class.php';

$form=new Form('form', 'post');
$form->AddInput(array(
'elementsfromdb'=>array(
'table'=>'paises',
'values'=>'id',
'options'=>'pais',
),
'attributes'=>array(
'type'=>'select',
'id'=>'select_1',
'name'=>'select_1'
),
'externalclass'=>'elementsfromdb',
'selected'=>'49',
'default'=>array(
'value'=>'0',
'option'=>'Elige...'
)
));
$form->AddInput(array(
'elementsfromdb'=>array(
'table'=>'estados',
'values'=>'id',
'options'=>'estado',
),
'attributes'=>array(
'type'=>'select',
'id'=>'select_2',
'name'=>'select_2'
),
'externalclass'=>'linkedselect',
'linkedby'=>array(
'reference'=>'relacion',
'id'=>'select_1',
'showdefault'=>'0'
),
'default'=>array(
'value'=>'0',
'option'=>'Elige...'
),
'locations'=>array(
'js'=>'js/',
'php'=>'classes/'
)
));
$form->AddInput(array(
'elementsfromdb'=>array(
'table'=>'municipios',
'values'=>'id',
'options'=>'municipio',
),
'attributes'=>array(
'type'=>'select',
'id'=>'select_3',
'name'=>'select_3'
),
'externalclass'=>'linkedselect',
'linkedby'=>array(
'reference'=>'relacion',
'id'=>'select_2',
'showdefault'=>'0'
),
'default'=>array(
'value'=>'0',
'option'=>'Elige...'
),
'locations'=>array(
'js'=>'js/',
'php'=>'classes/'
)
));
$form->GenerateForm();
?>

La segunda parte es el constructor que va antes del head:
Código:
<?php $form->GenerateAdditionalJS(); ?> 
</head>

Y la tercera parte que agregar los controles en si:
Código:
<?php $form->GetInput('select_1'); ?>
<?php $form->GetInput('select_2'); ?>
<?php $form->GetInput('select_3'); ?>

Y la cuarta parte que es en el archivo php que recibe el formulario el del action del index averiguar que Pais, Estado y Ciudad seleccionaron asi:
Código:
//averiguar pais
   $_SESSION["select_1"]=$_POST['select_1'];
   $_select_1=$_SESSION["select_1"];
   
   $link=mysql_connect("localhost","sistema4_ixel","fashionxtg2011");
   mysql_select_db("sistema4_ixelmoda",$link);
   mysql_query("SET NAMES 'utf8'"); 
   $consulta=mysql_query("select * from paises where id = '$_select_1'",$link);
   mysql_close($link);
   
   if( mysql_num_rows($consulta) == 1) {
$array = mysql_fetch_array($consulta);
$_SESSION["pais"] = $array["pais"];
$_pais = $_SESSION["pais"];
mysql_free_result($consulta);
   }
   //fin pais

   //averiguar departamento/estado
   $_SESSION["select_2"]=$_POST['select_2'];
   $_select_2=$_SESSION["select_2"];

   $link=mysql_connect("localhost","sistema4_ixel","fashionxtg2011");
   mysql_select_db("sistema4_ixelmoda",$link);
   mysql_query("SET NAMES 'utf8'"); 
   $consulta=mysql_query("select * from estados where id = '$_select_2'",$link);
   mysql_close($link);
   
   if( mysql_num_rows($consulta) == 1) {
$array = mysql_fetch_array($consulta);
$_SESSION["estado"] = $array["estado"];
$_departamento = $_SESSION["estado"];
mysql_free_result($consulta);
   }
   //fin depto/estado

   //averiguar ciudad
   if (empty($_POST['ciudad'])){
   
   $_SESSION["select_3"]=$_POST['select_3'];
   $_select_3=$_SESSION["select_3"];
   
   $link=mysql_connect("localhost","sistema4_ixel","fashionxtg2011");
   mysql_select_db("sistema4_ixelmoda",$link); 
   mysql_query("SET NAMES 'utf8'"); 
   $consulta=mysql_query("select * from municipios where id = '$_select_3'",$link);
   mysql_close($link);
   
   if( mysql_num_rows($consulta) == 1) {
$array = mysql_fetch_array($consulta);
$_SESSION["municipio"] = $array["municipio"];
$_ciudad = $_SESSION["municipio"];
mysql_free_result($consulta);
   }
   
   }else{
   $_SESSION["municipio"]=$_POST['ciudad'];
   $_ciudad = $_SESSION["municipio"];
   }    
   //fin ciudad

Descargar ejemplo:
http://www.4shared.com/rar/_nb9_-4_/select_dependientes.html
El descargable tiene dos carpetas una formulario_sencillo donde esta el codigo necesario solo para los combos, y otra formulario_completo donde esta un formulario comun con mas opciones para usuarios mas avanzados.

No olvides agregar a tu proyecto las carpetas classes y js, para que tus combos funcionen.

Espero les guste y les sirva esta adaptacion que hice de ese esplendido ejemplo de combos dependientes. Graphixx.

Fuente Original:
http://www.formatoweb.com.ar/blog/2007/08/20/clase-para-generar-automaticamente-select-combos-dependientes-multinivel/


En línea

Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx Rōninnovation
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines