Algo parecido a lo que queres,
Primero la base de datos:
Código MySQL:
Ver original)
COMMENT='Ej.Refrigeracion, que podria contener Heladeras, Freezers...'
Ahora el Codigo que eran clases pero saque las funciones:
Código PHP:
Ver original<?php
<?php
// Configuro Base de Datos //
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '**********';
$dbname = 'table_name';
$dbport = 3306;
$conexion = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname, $dbport); $categorias = arbolJerarquico('categorias','idCategoria','nombreCategoria','idCategoriaPadre',0,$prefijo='-');
$categoriaPadre = 0;
foreach ($categorias as $valores)
{
global $datos;
$selected = ($categoriaPadre==$valores['id'])?' selected ': '';
$nivel = calcularNivel($valores['prefijo'],$prefijo);
$pixeles = 5 + $nivel * 10;
$datos[] = array('valor' => $valores['id'], 'nombre' => $valores['categoria'],
'pixeles' => $pixeles,
'nivel' => $nivel,
'selected' => $selected,
'espacios' => $espacios);
}
// en datos quedan todas las categorias
?>
<select id="idCategoriaPadre" name="idCategoriaPadre" class="inputsText" >
<option value="0" selected="selected">Nueva Categoria Padre</option>
<?php foreach ($datos as $categoria): ?>
<option value="<?php echo $categoria['value']; ?>" ><?php echo $categoria['espacios'] . $categoria['nombre']; ?></option>
<?php endforeach; ?>
</select>
<?php
/**
* Genera un arbol de categorias a partir de una base de datos.
*
* @param String $tabla nombre de la tabla de la cual se realizara el arbol jerarquico.
* @param String $campoId Campo clave primaria de la tabla.
* @param String $categoria Campo a mostrar = nombre de la categoria.
* @param String $relacion Campo que vincula a los hijos con los padres.
* @param Integer $padre es el padre para la categoria Actual.
* @param String $prefijo Prefijo que se antepondra a cada categoria.
* @return void
*/
function arbolJerarquico($tabla,$campoId,$categoria,$relacion,$padre,$prefijo='-')
{
global $categorias;
$categTable = generarArbolCategorias($tabla,$relacion,$padre);
if($categTable) {
while($filas) {
$categorias[]['id'] = $filas->$campoId;
$cnt = count($categorias)-1; $categorias[$cnt]['prefijo'] = $prefijo;
$categorias[$cnt]['categoria'] = $filas->$categoria;
$categorias[$cnt]['padre'] = $filas->padre;
arbolJerarquico($tabla,$campoId,$categoria,$relacion,$filas->$campoId, $prefijo . $prefijo);
}
}
return $categorias;
}
function generarArbolCategorias($tabla,$relacion,$padre)
{
global $conexion;
$consulta = "SELECT * FROM " . $tabla . " WHERE " . $relacion . "=" . $padre ." ORDER BY nombreCategoria";
return $resultado;
}
/**
* Calcula el nivel para una Categoria pasando el prefijo de la categoria actual y prefijo base.
*
* @param String $prfActual prefijo para la categoria a analizar.
* @param String $prfBase prefijo tomado como base por ej. -
* @return integer Entero natural que representa el nivel en el arbol jerarquico.
*/
function calcularNivel($prfActual,$prfBase)
$nivel = log($prfActual_b2,10)/log(2,10); return $nivel;
}
Mas o menos con eso andaria la cosa.
Saludos