Foros del Web » Programando para Internet » PHP »

tabular

Estas en el tema de tabular en el foro de PHP en Foros del Web. Estoy haciendo un código que muestre una clasificación de imágenes a partir de una base de datos. Los códigos de clasificación siguen una estructura de ...
  #1 (permalink)  
Antiguo 17/09/2009, 08:25
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
tabular

Estoy haciendo un código que muestre una clasificación de imágenes a partir de una base de datos. Los códigos de clasificación siguen una estructura de manera que unos tipos son hijos de otros, y como hay tipos que tienen varios padres, se muestran tantas veces como padres tengan, se muestran debajo de cada padre.

El orden sería de la siguiente manera: muestra el primer tipo que no tenga padre, y debajo de él sus hijos, mostrando a su vez debajo de cada hijo a los hijos de éste.

Todo se hace con una función que se llama a sí misma, más adelante incluyo el código, de manera que la función que muestra a los padres de primer nivel es la misma función que muestra al resto. Todos son mostrados por la misma función.

El problema está en que quisiera que los hijos se mostraran debajo del padre pero un poco más a la derecha, y a su vez los hijos de éstos otro poco más a la derecha.

No me vale con algo que diga simplemente "échate a la derecha" ya que es la misma función la que lo muestra todo. Debería ser algo que diga "escribe a partir de ahora 1cm más a la derecha" y luego "escribe a partir de ahora un cm más a la izquierda".

No sé cómo hacerlo.

Código:
<?php
function buscahijos($padre){
    global $clases;
    foreach ($clases as $actual){
        $hijo=$actual["ID"];
        if (eshijo($hijo, $padre)){
        echo "$hijo<br>";
        buscahijos($hijo);
        }
    }
}

function eshijo($hijo, $padre){
        
    if ($padre==0){
            $result=mysql_query("select count(*) from jerarquia where tipo=$hijo")or die (mysql_error());
            $existe=mysql_result($result,0);
            
            if (!$existe){
                
                return 1;
                
            }
            else{
                
                return 0;
                
            }
    }
    else{
        $result=mysql_query("select count(*) from jerarquia where tipo=$hijo AND padre = $padre")or die (mysql_error());
        $existe=mysql_result($result,0);
        
        
        
        return $existe;
    
    }
}

$link = mysql_connect("localhost","root","");
mysql_select_db(dbimagenes,$link);
$result=mysql_query("select * from tipos");
$i=0;
while($array = mysql_fetch_array($result,MYSQL_ASSOC)){
$clases[$i]["ID"] = $array["IDtipo"];
$clases[$i]["descrip"] = $array["descripcion"];
$i++;
}
$padre=0;
buscahijos($padre);
?>
  #2 (permalink)  
Antiguo 17/09/2009, 08:39
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: tabular

Generate una funcion que te agrege espacios en blanco a la izquierda.
Algo asi:
Funcion miFuncion(cadena,n)
Desde i=0 hasta n
cadena=" ".cadena;

Retornar cadena


miFuncion(miTexto,5)
n=5// Numero de espacios a la izquierda
  #3 (permalink)  
Antiguo 17/09/2009, 10:43
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: tabular

o bien, usar la función de PHP str_pad()
http://php.net/str_pad

Código PHP:
echo str_pad('abc'5"\t"STR_PAD_LEFT); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 17/09/2009, 11:44
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años
Puntos: 3
He puesto este código:
<?php
$numero=1;
echo "<br><br><br>";
$cadena=$numero;
for($i=1;$i<=10;$i++){
$cadena=" ".$cadena;
echo "$cadena<br>";
}
?>
y me escribe todos los números al mismo nivel

Voy a intentar explicar mejor lo que quiero hacer. Este es el código:

Código:
function buscahijos($padre){
    global $clases;
    foreach ($clases as $actual){
        $hijo=$actual["ID"];
        if (eshijo($hijo, $padre)){
        echo "$hijo<br>";
        buscahijos($hijo);
        }
    }
}
La función buscahijos busca en un array a los elementos que son hijos de uno determinado, y los va mostrando al mismo nivel, pero para cada hijo llama otra vez a la función buscahijos. Si éste hijo no tiene a su vez hijos, es mostrado y ya está, pero si tiene hijos, éstos se muestran de nuevo mediante la función buscahijos, pero quiero que sean mostrados más a la derecha que los otros.

Este código funciona bien, y muestra todos los elementos en el orden correcto, pero no sé cómo hacer que desplace a la derecha cada nuevo nivel.

Ya he dado con la clave. El tema es que en html el código para escribir un espacio es &nbsp, no se escribe un espacio tal cual.

Este código ya me muestra la clasificación como yo quería, también la he modificado para que me muestre el nombre del tipo en lugar del número:

<?php
function buscahijos($padre,$nivel){
global $clases;
foreach ($clases as $actual){
$hijo=$actual["ID"];
$nombre=$actual["descrip"];
if (eshijo($hijo, $padre)){
for($i=1;$i<=$nivel;$i++){
echo"&nbsp";
}
echo "$nombre<br>";
buscahijos($hijo,$nivel+10);
}
}
}

Última edición por GatorV; 17/09/2009 a las 12:55
  #5 (permalink)  
Antiguo 17/09/2009, 12:24
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: tabular

En efecto deberias tener en cuenta esto:
http://www.forosdelweb.com/f17/dream...e-esto-145982/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:42.