[TUTE] Clase para generar automaticamente select(combos) dependientes multinivel

Iniciado por Graphixx, 28 Diciembre 2012, 23:37 PM

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

Graphixx


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.

<?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:

<?php $form->GenerateAdditionalJS(); ?>
</head>


Y la tercera parte que agregar los controles en si:

<?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:

//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/
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog