Avatar billede tinem Novice
19. juni 2007 - 11:52 Der er 16 kommentarer og
1 løsning

Dynamic (2 level) navigation list

Jeg har brug for hjælp til at forstå denne tutorial http://www.tutorialized.com/tutorial/Dynamic-2-level-navigation-list/21070 som ligner det jeg har søgt efter et stykke tid.

Jeg diskuterer denne tutorial i dette forum http://www.webdigity.com/index.php/topic,6818.0.Dynamic+%282+level%29+navigation+list.html, men har IKKE fået svar på hvordan denne tutorial bruges, så måske er der nogen her som kan hjælpe mig lidt videre, hvis I altså forstår, hvad der skrives om?
Avatar billede dkfire Nybegynder
19. juni 2007 - 12:00 #1
Hvad er det du ikke kan forstå ?? hvad får du af fejl ??
Avatar billede tinem Novice
19. juni 2007 - 12:10 #2
Har du læst hvad jeg skriver i forummet?

Hvordan skal det laves? Hvis DU ikke har problemer med at forstå hvad de skriver, kunne du så ikke lave et eksempel, som jeg kunne se?
Avatar billede dkfire Nybegynder
19. juni 2007 - 12:40 #3
Altså hvor meget forstå du af den ?? har du prøvet at bruge den kode som er vist ??
Du skal huske at ligge noget indhold i databasen.

Hvordan ser din index.php fil ud nu ??
Avatar billede tinem Novice
19. juni 2007 - 13:01 #4
Det er nok det med at jeg selv skal lægge noget indhold i databasen, som jeg IKKE har forstået, det har jeg nemlig IKKE gjort. Kan du foreslå noget her?
Jeg har kun testet den offline og uden indhold i tabellen og får denne meddelelse

Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\Dynamic_Dropdown_ Menu_tutorial\index.php on line 2

Nedenfor min index.php fil

<? php
$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");
?>
Avatar billede dkfire Nybegynder
19. juni 2007 - 13:17 #5
For det første så hedder det ikke <? php men <?php
Avatar billede dkfire Nybegynder
19. juni 2007 - 13:18 #6
Men ja du skal nok ligge noget indhold i tabellen i databasen ellers virker det jo ikke
Avatar billede dkfire Nybegynder
19. juni 2007 - 13:46 #7
Og så skal du lige slette:
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";
    }
Avatar billede tinem Novice
19. juni 2007 - 13:55 #8
Jeg har nu lagt siden online http://www.tinemuller.dk/2level_tutorial/, men ved ikke hvad jeg skal skrive i tabellen?

Jeg har IKKE slettet de koder du skriver endnu. Gider du ikke lige fortælle om dette på forummet http://www.webdigity.com/index.php/topic,6818.0.Dynamic+%282+level%29+navigation+list.html, hvor programmøren lige har skrevet et indlæg, så vi kan se hvad han svarer til dit forslag?
Avatar billede dkfire Nybegynder
19. juni 2007 - 14:20 #9
To ting.
Jeg er ikke medlem af det forum og hvad får dig til at tro at det er ham som har lavet det script ?

Det jeg har bedt dig om at slette, skal du slette hvis du vil have det til at virke.
Det er noget kode som ikke skal være der, men som på side kun var skrevet for at uddybe funktionen dyn_menu.

Hvad du skal ligge ind i tabellen, du skal selvfølgelig skrive ind det som skal stå i din menu.

Prøv noget ala
INSERT INTO `dyn_menu` ( 'label', 'link_url', 'parent_id') VALUES ('Forside', 'index.php', 0 )
Avatar billede tinem Novice
19. juni 2007 - 14:39 #10
Jeg har gjort som du sagde og får nu fejlmeddelelserne som du kan se her http://www.tinemuller.dk/2level_tutorial/

index.php
<?php
$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;
}


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");
?>

Tabellen ser sådan her ud:

-- phpMyAdmin SQL Dump
-- version 2.9.0
-- http://www.phpmyadmin.net
--
-- Vært: localhost
-- Genereringstid: 19/06 2007 kl. 14:37:29
-- Serverversion: 5.0.24
-- PHP version: 4.4.4
--
-- Database: `tinemullerdk`
--

-- --------------------------------------------------------

--
-- Struktur-dump for tabellen `dyn_menu`
--

CREATE TABLE `dyn_menu` (
  `id` int(11) NOT NULL auto_increment,
  `label` varchar(50) collate latin1_general_ci NOT NULL default '',
  `link_url` varchar(100) collate latin1_general_ci NOT NULL default '#',
  `parent_id` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;

--
-- Data dump for tabellen `dyn_menu`
--

INSERT INTO `dyn_menu` (`id`, `label`, `link_url`, `parent_id`) VALUES
(1, 'Forside', 'index.php', 0);
Avatar billede dkfire Nybegynder
19. juni 2007 - 14:48 #11
Du bliver jo også nød til at lave en forbindelse til mysql før din mysql_query.

Hvor meget har du arbejdet med php/mysql før ??
Avatar billede tinem Novice
19. juni 2007 - 14:54 #12
Meget lidt, men jeg har da fået et par php mysql sider til at virke.:-)

Denne tutorial er åbenbart IKKE for begyndere som mig. Synes nu godt at de kunne forklare det lidt mere tydeligt. Nu må jeg så se om jeg kan finde ud af at lave denne forbindelse.
Avatar billede dkfire Nybegynder
19. juni 2007 - 14:59 #13
Du skal bruge mysql_connect(), se evt her: http://dk2.php.net/manual/en/function.mysql-connect.php

og du skal bruge mysql_select_db(), se evt her:
http://dk2.php.net/manual/en/function.mysql-select-db.php
Avatar billede dkfire Nybegynder
19. juni 2007 - 15:17 #14
I starten af din side skriver du:
<?php
  $connection = mysql_connect( 'localhost', 'dit mysql brugernavn', 'dit mysql password') or die(mysql_error());
  mysql_select_db('tinemullerdk');
?>
Avatar billede dkfire Nybegynder
20. juni 2007 - 17:00 #15
Har du fået det til at virke ??
Avatar billede tinem Novice
20. juni 2007 - 17:55 #16
Ja tak, sådan da. Men det ser ikke ud af meget http://www.tinemuller.dk/2level_tutorial/. Skal tænke lidt mere over, hvordan jeg kommer videre og hvordan jeg kan bruge det.
Men du skal have mange tak for hjælpen og skriv et svar så jeg kan give dig pointene.
Hvis du skulle få lyst til at lave en side selv, hvor du bruger denne tutorial, må du meget gerne sende besked om dette.:-)
Avatar billede dkfire Nybegynder
20. juni 2007 - 20:09 #17
Skal jeg nok gøre.
Her er et svar.
Du kan primært bruge det script til hvis du har alt html til dine sider liggende i en database.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester