2010-05-18 3 views
5

Мне нужно показать древовидную структуру моих категорий, сохраненную в моей базе данных mysql.Как создать древовидный вид из MySQL и PHP и jQuery

База данных таблицы:

стол: кошки:

колонны: идентификатор, имя, родительские проблема заключается в 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; 

я даже в этом форуме: http://forums.tizag.com/showthread.php?p=60649

проблема в php-части моих кодов, о которых я упомянул. я не могу показать подменю, я имею в виду, действительно, я не знаю, как показать подменю

Есть ли шанс, что про php-кодер поможет мне здесь?

+1

Что это ваша проблема, опять же? Вы только что вставили какой-то код, но не сказали, в чем была ваша проблема ... Надеюсь, вы не ожидаете, что мы скачаем сценарий, который вы упомянули, * поймите свою проблему *, а затем для вас бесплатно ... – Seb

ответ

3

Похоже, что вы отправляете дубликаты данных в свою переменную меню, которая не обязательно должна быть там.

Я хотел бы изменить вашу функцию, чтобы сделать это:

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; 

обновляется на основе замечаний по вопросу

+0

можете ли вы показать пример html, который вы генерируете? – Nalum

+0

: D спасибо, что ваш slution был абсолютно прав, но проблема в том, что этот скрипт добавит 23 запроса к общим запросам страницы, просто у меня будет 10 строк в таблице. что, если у кого-то 40 строк , тогда бог благословит его! есть ли способ обойти эту проблему?? –

+0

Вы можете запросить таблицу и получить все строки, настроенные в массиве, а затем петлю над массивом, чтобы создать необходимый html. – Nalum

Смежные вопросы