FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Jag har problem med ett menysystem - får inte till det. Någom som vet vad som är fel ? Det finns en under meny under start men får inte fram den..
se Sidan http://www.adeniasystems.se/test/home/index.php Menyn Kod:
$sql = "SELECT id, label, link_url, parent_id FROM dyn_menu ORDER BY parent_id, id ASC"; $items = mysql_query($sql); while ($obj = mysql_fetch_object($items)) { if ($obj->parent_id == 0) { $parent_menu[$obj->id]['label'] = $obj->label; $parent_menu[$obj->id]['link'] = $obj->link_url; } else { $sub_menu[$obj->id]['parent'] = $obj->parent_id; $sub_menu[$obj->id]['label'] = $obj->label; $sub_menu[$obj->id]['link'] = $obj->link_url; $parent_menu[$obj->parent_id]['count']++; } } mysql_free_result($items); function dyn_menu($parent_array, $sub_array, $qs_val = "menu", $main_id = "nav", $sub_id = "subnav", $extra_style = "foldout") { $menu = "<ul id=\"".$main_id."\">\n"; foreach ($parent_array as $pkey => $pval) { if (!empty($pval['count'])) { $menu .= " <li><a class=\"".$extra_style."\" href=\"".$pval['link']."?".$qs_val."=".$pkey."\">".$pval['label']."</a></li>\n"; } else { $menu .= " <li><a href=\"".$pval['link']."\">".$pval['label']."</a></li>\n"; } if (!empty($_REQUEST[$qs_val])) { $menu .= "<ul id=\"".$sub_id."\">\n"; foreach ($sub_array as $sval) { if ($pkey == $_REQUEST[$qs_val] && $pkey == $sval['parent']) { $menu .= "<li><a href=\"".rebuild_link($sval['link'], $qs_val, $sval['parent'])."\">".$sval['label']."</a></li>\n"; } } $menu .= "</ul>\n"; } } $menu .= "</ul>\n"; return $menu; } foreach ($parent_array as $pkey => $pval) { if (!empty($pval['count'])) { $menu .= " <li><a class=\"".$extra_style."\" href=\"".$pval['link']."?".$qs_val."=".$pkey."\">".$pval['label']."</a></li>\n"; } else { $menu .= " <li><a href=\"".$pval['link']."\">".$pval['label']."</a></li>\n"; }} if (!empty($_REQUEST[$qs_val])) { $menu .= "<ul id=\"".$sub_id."\">\n"; foreach ($sub_array as $sval) { if ($pkey == $_REQUEST[$qs_val] && $pkey == $sval['parent']) { $menu .= "<li><a href=\"".rebuild_link($sval['link'], $qs_val, $sval['parent'])."\">".$sval['label']."</a></li>\n"; } } $menu .= "</ul>\n"; } function rebuild_link($link, $parent_var, $parent_val) { $link_parts = explode("?", $link); $base_var = "?".$parent_var."=".$parent_val; if (!empty($link_parts[1])) { $link_parts[1] = str_replace("&", "##", $link_parts[1]); $parts = explode("##", $link_parts[1]); $newParts = array(); foreach ($parts as $val) { $val_parts = explode("=", $val); if ($val_parts[0] != $parent_var) { array_push($newParts, $val); } } if (count($newParts) != 0) { $qs = "&".implode("&", $newParts); } return $link_parts[0].$base_var.$qs; } else { return $link_parts[0].$base_var; } } echo dyn_menu($parent_menu, $sub_menu, "menu", "nav", "subnav"); NULL - alltså har den inget värde.. vart kan det ha gått fel nogånstans? |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Medlem
|
Var gör du var_dump någonstans?
Variabeln $parent_array finns med tre gånger i ditt kodexempel (använd sök/markera alla i webbläsaren...) 1. Som parameternamn i funktionshuvudet till dyn_menu 2. Som variabel inne i denna funktion 3. Som "fri" variabel utanför någon funktion (förutsatt att indenteringen stämmer i din inklistrade kod...) Tredje gången försöker du alltså köra foreach på den utan att du har gett den något värde, därför är den NULL. |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
Alldeles före echo dyn_menu($parent_menu, $sub_menu, "menu", "nav", "subnav");
Hmmm.. ok men hur får jag till så den har ett värde ? |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Medlem
|
Du får helt enkelt tilldela den ett värde
![]() Men till att börja med skulle det nog underlätta för dig att inte blanda funktionsdefinitioner och "kod som körs direkt". (Hittar inga bättre ord just nu...) Jag har inte alls tittat på vad din kod egentligen gör, men jag menar något sånt här: Kod:
// ===== FUNKTIONER ===== function dyn_menu($parent_array, $sub_array, $qs_val = "menu", $main_id = "nav", $sub_id = "subnav", $extra_style = "foldout") { // ... } function rebuild_link($link, $parent_var, $parent_val) { // ... } // ===== "DIREKT KOD" ===== inget bra namn :( det står still i huvudet just nu... $sql = "SELECT id, label, link_url, parent_id FROM dyn_menu ORDER BY parent_id, id ASC"; $items = mysql_query($sql); while ($obj = mysql_fetch_object($items)) { // ... } mysql_free_result($items); foreach ($parent_array as $pkey => $pval) { // <---- Här är ditt problem! // ... } if (!empty($_REQUEST[$qs_val])) { // ... } echo dyn_menu($parent_menu, $sub_menu, "menu", "nav", "subnav"); |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Medlem
|
Jag är inte så jätteduktig på detta jag följde en tutorial som inte verkar fungera.. http://www.finalwebsites.com/tutoria...ation-list.php
Jag antar att det saknas en viktig detalj i den tutorialen, någom som vet vad jag skall tilldela $parent_array ? |
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Medlem
|
Kollade lite snabbt på länken du skickade och insåg att du har klistrat in koden lite fel. (Inte alldeles övertydligt i tutorialen iofs.)
Efter texten "To do this we start in our function with a "ul" element, to identify the element with CSS we add some id attribute here." förklarar de vad funktionen ovanför gör. Även det därpå följande blocket finns med i funktionen ovan. Om du kollar ser du att det står samma sak. Alltså, prova med detta istället (jag har tagit bort koden som var inklistrad två gånger, och dessutom lagt båda funktionsdefinitionerna först) Kod:
function dyn_menu($parent_array, $sub_array, $qs_val = "menu", $main_id = "nav", $sub_id = "subnav", $extra_style = "foldout") { $menu = "<ul id=\"".$main_id."\">\n"; foreach ($parent_array as $pkey => $pval) { if (!empty($pval['count'])) { $menu .= " <li><a class=\"".$extra_style."\" href=\"".$pval['link']."?".$qs_val."=".$pkey."\">".$pval['label']."</a></li>\n"; } else { $menu .= " <li><a href=\"".$pval['link']."\">".$pval['label']."</a></li>\n"; } if (!empty($_REQUEST[$qs_val])) { $menu .= "<ul id=\"".$sub_id."\">\n"; foreach ($sub_array as $sval) { if ($pkey == $_REQUEST[$qs_val] && $pkey == $sval['parent']) { $menu .= "<li><a href=\"".rebuild_link($sval['link'], $qs_val, $sval['parent'])."\">".$sval['label']."</a></li>\n"; } } $menu .= "</ul>\n"; } } $menu .= "</ul>\n"; return $menu; } function rebuild_link($link, $parent_var, $parent_val) { $link_parts = explode("?", $link); $base_var = "?".$parent_var."=".$parent_val; if (!empty($link_parts[1])) { $link_parts[1] = str_replace("&", "##", $link_parts[1]); $parts = explode("##", $link_parts[1]); $newParts = array(); foreach ($parts as $val) { $val_parts = explode("=", $val); if ($val_parts[0] != $parent_var) { array_push($newParts, $val); } } if (count($newParts) != 0) { $qs = "&".implode("&", $newParts); } return $link_parts[0].$base_var.$qs; } else { return $link_parts[0].$base_var; } } // ---------- $sql = "SELECT id, label, link_url, parent_id FROM dyn_menu ORDER BY parent_id, id ASC"; $items = mysql_query($sql); while ($obj = mysql_fetch_object($items)) { if ($obj->parent_id == 0) { $parent_menu[$obj->id]['label'] = $obj->label; $parent_menu[$obj->id]['link'] = $obj->link_url; } else { $sub_menu[$obj->id]['parent'] = $obj->parent_id; $sub_menu[$obj->id]['label'] = $obj->label; $sub_menu[$obj->id]['link'] = $obj->link_url; $parent_menu[$obj->parent_id]['count']++; } } mysql_free_result($items); echo dyn_menu($parent_menu, $sub_menu, "menu", "nav", "subnav"); |
||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Medlem
|
Ja, felmeddelandet försvann men den visar ändå inga undermenyer.. hehe det här var en krånlig en.. hehe =)
---- uppdaterat Jo när man klicka på Info ändras URL:en till http://www.adeniasystems.se/test/home/index.php#?menu=2 men inget visas. Ändrar jag URL:en till Jo när man klicka på http://www.adeniasystems.se/test/home/index.php?menu=2 öppnas undermenyn under info =) Hur länken visas kan jag säkert fixa. tack för all hjälp =) |
||
![]() |
![]() |
Svara |
|
|