Kom ihåg mig?
Home Menu

Menu


menyproblem php

Ämnesverktyg Visningsalternativ
Oläst 2009-01-10, 13:53 #1
Firekicker Firekicker är inte uppkopplad
Medlem
 
Reg.datum: Mar 2003
Inlägg: 86
Firekicker Firekicker är inte uppkopplad
Medlem
 
Reg.datum: Mar 2003
Inlägg: 86
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("&amp;", "##", $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 = "&amp;".implode("&amp;", $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");
var_dump($parent_array) ger värdet NULL
NULL - alltså har den inget värde.. vart kan det ha gått fel nogånstans?
Firekicker är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-10, 18:46 #2
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
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.
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-11, 00:16 #3
Firekicker Firekicker är inte uppkopplad
Medlem
 
Reg.datum: Mar 2003
Inlägg: 86
Firekicker Firekicker är inte uppkopplad
Medlem
 
Reg.datum: Mar 2003
Inlägg: 86
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 ?
Firekicker är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-11, 08:21 #4
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
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");
Då kanske det blir lite tydligare att du aldrig har gett variabeln $parent_array något värde när du försöker göra foreach.
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-11, 14:45 #5
Firekicker Firekicker är inte uppkopplad
Medlem
 
Reg.datum: Mar 2003
Inlägg: 86
Firekicker Firekicker är inte uppkopplad
Medlem
 
Reg.datum: Mar 2003
Inlägg: 86
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 ?
Firekicker är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-11, 22:05 #6
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
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("&amp;", "##", $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 = "&amp;".implode("&amp;", $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");
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-01-11, 22:56 #7
Firekicker Firekicker är inte uppkopplad
Medlem
 
Reg.datum: Mar 2003
Inlägg: 86
Firekicker Firekicker är inte uppkopplad
Medlem
 
Reg.datum: Mar 2003
Inlägg: 86
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 =)
Firekicker är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 14:54.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017