Autor Tema: [TUTE] Clase para generar automaticamente select(combos) dependientes multinivel  (Leído 3513 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado graphixx

  • Whitehat
  • Administrador
  • Usuario Héroe
  • *****
  • Mensajes: 1527
  • Karma: +1984/-0
  • Whitehat
    • Sistemas y Controles
Este ejemplo tiene todos los departamentos de Colombia con sus respectivas ciudades/municipios. (BD CON TODOS LOS DEPARTAMENTOS, CIUDADES, MUNICIPIOS DE COLOMBIA).


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: [Seleccionar]
<?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: [Seleccionar]
<?php $form->GenerateAdditionalJS(); ?>
</head>

Y la tercera parte que agregar los controles en si:
Código: [Seleccionar]
<?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: [Seleccionar]
//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/
« Última Modificación: 31 de octubre de 2013, 01:48:33 pm por graphixx »
Para tus servicios y comprar productos de Sistemas piensa en contratarnos, usa los botones de WhatsApp ubicados en nuestra pagina principal: www.sistemasycontroles.net