2010-05-18 4 views
5

je dois montrer une vue arborescente de mes catégories, enregistrées dans ma base de données MySQL.Comment faire une arborescence de MySQL et PHP et jquery

table de base de données:

Table: chats:

colonnes: id, nom, parent problème est en partie php:

//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 même demandé dans ce forum: http://forums.tizag.com/showthread.php?p=60649

problème est en partie php de mes codes que je parlais. je ne peux pas montrer les sous-menus, je veux dire, vraiment je ne sais pas comment montrer les sous-menus

Y at-il une chance d'un codeur pro php m'aider ici?

+1

Quel est votre problème, encore une fois? Vous venez de coller un code, mais ne dites pas qui était votre problème exactement ... J'espère que vous ne nous attendant à télécharger le script que vous mentionnez, * comprendre votre problème *, puis travailler pour vous gratuitement ... – Seb

Répondre

3

Il semble que vous envoyez des données en double à votre variable de menu, qui n'a pas besoin d'être là.

je changerais votre fonction pour le faire:

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; 

en fonction des commentaires actualisé sur la question

+0

pouvez-vous montrer un exemple du code HTML que vous générez? – Nalum

+0

: D Merci de votre sloution était tout à fait correct, mais le problème actuel est que, ce script ajoutera 23 requêtes aux requêtes totales de page, juste concider j'ai 10 lignes dans le tableau. si quelqu'un a 40 rangs alors que Dieu le bénisse! est-il possible de contourner ce problème? –

+0

Vous pouvez interroger la table et obtenir toutes les lignes installé dans un tableau en boucle puis sur le tableau pour créer le code HTML nécessaire. – Nalum