Php Динамическая ошибка кода Menubar - PullRequest
1 голос
/ 05 сентября 2011

У меня проблема с тем, чтобы ссылки в моей панели работали правильно, база данных настроена так: my db http://bloodkittens.com/resources/upload/db.png

<?php 
error_reporting(E_ALL);
ini_set('display_errors', '1');

mysql_connect("localhost", "dbuser", "******");
mysql_select_db("guild");

// prepare special array with parent-child relations
$menuData = array(
'items' => array(),
'parents' => array()
);
$result = mysql_query("SELECT  id_menu id, parentID_menu parentId, label_menu name FROM main_menu` ORDER BY parentID_menu"); 

while ($menuItem = mysql_fetch_assoc($result))
{
$menuData['items'][$menuItem['id']] = $menuItem;
$menuData['parents'][$menuItem['parentId']][] = $menuItem['id'];
}

// menu builder function, parentId 0 is the root
function buildMenu($parentId, $menuData)
{
$html = '';
$parent='';

if (isset($menuData['parents'][$parentId]))
{
    $menuClass= ($parentId==0) ? ' class="navbar" id="navbar"' : '';
    $parent= ($parentId==0) ? 0 : 1;    
    $html = "<ul{$menuClass}>\n";

    foreach ($menuData['parents'][$parentId] as $itemId)
    {
        //subment
        $result=mysql_query("select * from main_menu where parentID_menu='$itemId'");
        if (mysql_num_rows($result)>(int)0 && $parentId!=0) {
            $subm  =' class="navbar"';
        }else{
           $subm  ='';
        }
        //end

        $menu = $parentId == 0 ? ' class="menulink"' : '';      //class of main menu
        $html .= '<li>' . "<a{$subm}{$menu} href=\"#\" >{$menuData['items'][$itemId]['name']}</a>";

        // find childitems recursively
        $html .= buildMenu($itemId, $menuData);

        $html .= '</li>';
    }
    $html .= '</ul>';
}

return $html;
}

// output the menu
echo buildMenu(0, $menuData);
?>

Как бы я сделал так, чтобы значение link_menu было href в коде для каждой отдельной записи в БД? а не «#», потому что код работает полностью, и я очень рад, как он выглядит после того, как я применил к нему свой CSS, но ссылки не работают

Ответы [ 4 ]

1 голос
/ 26 октября 2011

Для работы меню сортировки необходимо добавить новое поле в таблицу и изменить этот запрос с

$result = mysql_query("SELECT id_menu id, parentID_menu parentId, label_menu name,  link_menu link FROM main_menu ORDER BY parentID_menu");

на:

$result = mysql_query("SELECT id_menu id, parentID_menu parentId, label_menu name,  link_menu link  FROM main_menu  ORDER BY menu_sort");
0 голосов
/ 05 сентября 2011

Вместо href=\"#\" > используйте это:

href=\"{$menuData['items'][$itemId]['link_menu']}\" >
0 голосов
/ 06 сентября 2011

код, который я использовал, был в конце концов таким, я думаю, что он заставил его работать по чистой случайности, но независимо от того, выиграл я:)

<?php 
error_reporting(E_ALL);
ini_set('display_errors', '1');

mysql_connect("localhost", "BloodKittens", "Zangoshi1");
mysql_select_db("bloodkittens");

// prepare special array with parent-child relations
$menuData = array(
'items' => array(),
'parents' => array(),
'links' => array()
);
 $result = mysql_query("SELECT id_menu id, parentID_menu parentId, label_menu name,  link_menu link FROM main_menu ORDER BY parentID_menu");

while ($menuItem = mysql_fetch_assoc($result))
{
$menuData['items'][$menuItem['id']] = $menuItem;
$menuData['parents'][$menuItem['parentId']][] = $menuItem['id'];
$menuData['links'] = $menuItem['link'];
}

// menu builder function, parentId 0 is the root
function buildMenu($parentId, $menuData)
 {
$html = '';
$parent='';

if (isset($menuData['parents'][$parentId]))
{
    $menuClass= ($parentId==0) ? ' class="navbar" id="navbar"' : '';
    $parent= ($parentId==0) ? 0 : 1;    
    $html = "<ul{$menuClass}>\n";

    foreach ($menuData['parents'][$parentId] as $itemId)
    {
        //subment
        $result=mysql_query("select * from main_menu where parentID_menu='$itemId'");
        if (mysql_num_rows($result)>(int)0 && $parentId!=0) {
            $subm  =' class="navbar"';
        }else{
           $subm  ='';
        }
        //end

        $menu = $parentId == 0 ? ' class="menulink"' : '';      //class of main menu
        $html .= '<li>' . "<a{$subm}{$menu} href=\"{$menuData['items'][$itemId]['link']}\" >{$menuData['items'][$itemId]['name']}</a>";

        // find childitems recursively
        $html .= buildMenu($itemId, $menuData);

        $html .= '</li>';
    }
       $html .= '</ul>';
   }

   return $html;
 }

// output the menu
echo buildMenu(0, $menuData);

?>
0 голосов
/ 05 сентября 2011

вы никогда не выбираете его

$result = mysql_query("SELECT id_menu id, parentID_menu parentId, label_menu, link_menu, name FROM main_menu ORDER BY parentID_menu"); 

, а затем ..

$html .= '<li>' . "<a{$subm}{$menu} href=\"{$menuData['items'][$itemId]['link_menu']}\" >{$menuData['items'][$itemId]['name']}</a>";
...