2010-05-18 11 views
5

necesito mostrar una vista en árbol de mis categorías, guardada en mi base de datos mysql.Cómo hacer una vista en árbol desde MySQL y PHP y jquery

tabla de base de datos:

mesa: gatos:

columnas: identificación, nombre, padre problema es en php parte:

//function to build tree menu from db table test1 
function tree_set($index) 
{ 
    global $menu; 
    $q=mysql_query("select * from cats where parent='$index'"); 
    if(!mysql_num_rows($q)) 
     return; 
    $menu .= '<ul>'."\n"; 
    while($arr=mysql_fetch_assoc($q)) 
    { 
     $menu .= '<li>'; 
     $menu .= '<span class="file">'.$arr['name'].'</span>';//you can add another output there 
     $menu .=tree_set("".$arr['id'].""); 
     $menu .= '</li>'."\n"; 
    } 

    $menu.= '</ul>'."\n"; 
return $menu; 

} 



//variable $menu must be defined before the function call 
$menu = ' 
<link rel="stylesheet" href="modules/Topics/includes/jquery.treeview.css" /> 
<script src="modules/Topics/includes/lib/jquery.cookie.js" type="text/javascript"></script> 
<script src="modules/Topics/includes/jquery.treeview.js" type="text/javascript"></script> 
<script type="text/javascript" src="modules/Topics/includes/demo/demo.js"></script> 
<ul id="browser" class="filetree">'."\n"; 
$menu .= tree_set(0); 
$menu .= '</ul>'; 
echo $menu; 

i aun preguntado en este foro: http://forums.tizag.com/showthread.php?p=60649

problema es en php parte de mis códigos que he mencionado. no puedo mostrar los menús, quiero decir, realmente no sé cómo mostrar los menús

¿hay alguna posibilidad de que un programador pro php me ayude aquí?

+1

¿Cuál es su problema, otra vez? Acabas de pegar un código pero no dijiste cuál fue tu problema exactamente ... Espero que no esperes que descarguemos el script que mencionas, * entiendas tu problema *, y luego trabajas para ti gratis ... – Seb

Respuesta

3

Parece que está enviando datos duplicados a su variable de menú, que no necesita estar allí.

que cambiaría su función para hacer esto:

function tree_set($index) 
{ 
    //global $menu; Remove this. 
    $q=mysql_query("select * from cats where parent='$index'"); 
    if(mysql_num_rows($q) === 0) 
    { 
     return; 
    } 

    // User $tree instead of the $menu global as this way there shouldn't be any data duplication 
    $tree = $index > 0 ? '<ul>' : ''; // If we are on index 0 then we don't need the enclosing ul 
    while($arr=mysql_fetch_assoc($q)) 
    { 
     $subFileCount=mysql_query("select * from cats where parent='{$arr['id']}'"); 
     if(mysql_num_rows($subFileCount) > 0) 
     { 
      $class = 'folder'; 
     } 
     else 
     { 
      $class = 'file'; 
     } 

     $tree .= '<li>'; 
     $tree .= '<span class="'.$class.'">'.$arr['name'].'</span>'; 
     $tree .=tree_set("".$arr['id'].""); 
     $tree .= '</li>'."\n"; 
    } 
    $tree .= $index > 0 ? '</ul>' : ''; // If we are on index 0 then we don't need the enclosing ul 

    return $tree; 
} 

//variable $menu must be defined before the function call 
$menu = '....<ul id="browser" class="filetree">'."\n"; 
$menu .= tree_set(0); 
$menu .= '</ul>'; 
echo $menu; 

actualiza basándose en los comentarios sobre la pregunta

+0

¿Puedes mostrar un ejemplo del html que estás generando? – Nalum

+0

: D gracias que tu sloution fue totalmente correcto, pero el problema actual es que este script agregará 23 consultas al total de consultas de la página, solo que tengo 10 filas en la tabla. ¿Qué pasa si alguien tiene 40 filas entonces Dios lo bendiga! ¿Hay alguna forma de evitar este problema? –

+0

Puede consultar la tabla y obtener todas las filas configuradas en una matriz y luego recorrer la matriz para crear el html necesario. – Nalum

Cuestiones relacionadas