Ver Mensaje Individual
  #3 (permalink)  
Antiguo 16/10/2012, 10:30
Avatar de portalmana
portalmana
 
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: Select con varias categorias

Algo parecido a lo que queres,
Primero la base de datos:
Código MySQL:
Ver original
  1. CREATE TABLE `categorias` (
  2.     `idCategoria` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.     `nombreCategoria` VARCHAR(60) NOT NULL,
  4.     `idCategoriaPadre` SMALLINT(6) NULL DEFAULT '0' COMMENT 'Nos refleja si es hijo de una categoria o es padre(0).',
  5.     `imagenCategoria` VARCHAR(150) NULL DEFAULT NULL,
  6.     `padre` SET('No','Si') NOT NULL DEFAULT 'No',
  7.     `descripcionCategoria` TEXT NULL,
  8.     PRIMARY KEY (`idCategoria`)
  9. )
  10. COMMENT='Ej.Refrigeracion, que podria contener Heladeras, Freezers...'
  11. COLLATE='utf8_general_ci'
  12. ENGINE=MyISAM

Ahora el Codigo que eran clases pero saque las funciones:
Código PHP:
Ver original
  1. <?php
  2. <?php
  3. // Configuro Base de Datos //
  4. $dbhost     = 'localhost';
  5. $dbuser     = 'root';
  6. $dbpass     = '**********';
  7. $dbname     = 'table_name';
  8. $dbport     = 3306;
  9. $conexion   = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname, $dbport);
  10. $categorias = arbolJerarquico('categorias','idCategoria','nombreCategoria','idCategoriaPadre',0,$prefijo='-');
  11. $datos      = array();
  12. $categoriaPadre = 0;
  13.  
  14.  
  15.         foreach ($categorias as $valores)
  16.         {  
  17.                     global  $datos;
  18.                     $selected   = ($categoriaPadre==$valores['id'])?' selected ': '';
  19.             $nivel      = calcularNivel($valores['prefijo'],$prefijo);
  20.             $pixeles    = 5 + $nivel * 10;
  21.             $espacios   = str_repeat('=>',$nivel*2);
  22.             $datos[]    = array('valor'     => $valores['id'],
  23.                                                 'nombre'    => $valores['categoria'],
  24.                         'pixeles'   => $pixeles,
  25.                         'nivel'     => $nivel,
  26.                         'selected'  => $selected,
  27.                         'espacios'  => $espacios);
  28.            
  29.         }  
  30. // en datos quedan todas las categorias
  31. ?>
  32. <select id="idCategoriaPadre" name="idCategoriaPadre" class="inputsText" >
  33. <option value="0" selected="selected">Nueva Categoria Padre</option>
  34. <?php foreach ($datos as $categoria): ?>
  35. <option value="<?php echo $categoria['value']; ?>" ><?php echo $categoria['espacios'] . $categoria['nombre']; ?></option>
  36. <?php endforeach; ?>
  37. </select>
  38.  
  39. <?php
  40.  
  41.     /**
  42.      * Genera un arbol de categorias a partir de una base de datos.
  43.      *
  44.      * @param   String  $tabla      nombre de la tabla de la cual se realizara el arbol jerarquico.
  45.      * @param   String  $campoId    Campo clave primaria de la tabla.
  46.      * @param   String  $categoria  Campo a mostrar = nombre de la categoria.
  47.      * @param   String  $relacion   Campo que vincula a los hijos con los padres.
  48.      * @param   Integer $padre      es el padre para la categoria Actual.
  49.      * @param   String  $prefijo    Prefijo que se antepondra a cada categoria.
  50.      * @return  void
  51.      */
  52.     function arbolJerarquico($tabla,$campoId,$categoria,$relacion,$padre,$prefijo='-')
  53.     {
  54.             global $categorias;
  55.             $categTable         = generarArbolCategorias($tabla,$relacion,$padre);
  56.             if($categTable) {  
  57.                 $filas      = mysqli_fetch_object($categTable);
  58.             while($filas) {
  59.                     $categorias[]['id']             = $filas->$campoId;
  60.                     $cnt                            = count($categorias)-1;
  61.                     $categorias[$cnt]['prefijo']    = $prefijo;
  62.                     $categorias[$cnt]['categoria']  = $filas->$categoria;
  63.                     $categorias[$cnt]['padre']      = $filas->padre;
  64.                     arbolJerarquico($tabla,$campoId,$categoria,$relacion,$filas->$campoId, $prefijo . $prefijo);
  65.                     $filas      = mysqli_fetch_object($categTable);
  66.             }
  67.             }
  68.             return $categorias;
  69.     }
  70.    
  71.  
  72.         function generarArbolCategorias($tabla,$relacion,$padre)
  73.     {
  74.             global $conexion;
  75.             $consulta   = "SELECT  * FROM " . $tabla . " WHERE " . $relacion . "=" . $padre ." ORDER BY nombreCategoria";
  76.             $resultado  = mysqli_query($conexion, $consulta);
  77.             return $resultado;
  78.     }
  79.    
  80.     /**
  81.      * Calcula el nivel para una Categoria pasando el prefijo de la categoria actual y prefijo base.
  82.      *
  83.      * @param   String  $prfActual  prefijo para la categoria a analizar.
  84.      * @param   String  $prfBase    prefijo tomado como base por ej. -
  85.      * @return  integer Entero natural que representa el nivel en el arbol jerarquico.
  86.      */
  87.     function calcularNivel($prfActual,$prfBase)
  88.     {   $prfActual_b2   = strlen($prfActual) / strlen($prfBase);
  89.         $nivel          = log($prfActual_b2,10)/log(2,10);
  90.         return $nivel;
  91.     }

Mas o menos con eso andaria la cosa.
Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp