Visa ett inlägg
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