Avatar billede futte850 Nybegynder
30. april 2012 - 17:12 Der er 9 kommentarer og
1 løsning

ang. menu system

Hejsa.
Jeg er igang med at lave et lille menu system, se test siden:
http://www.dummierun.dk/php/menu/

Koden:

<!DOCTYPE html>
<html lang="da-DK">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <meta name="description" content="Portfolio AND Playground" />
    <meta name="keywords" content="Portfolio, Design, Profil" />
   
    <title>dummierun | Header Test</title>
   
    <style type="text/css">
       
        body {
            font-family: Helvetica, Arial, sans-serif;
            font-size: 11px;
            }
           
        #header {
            height: 100px;
            }
           
        .nav a {
            display: block;
            padding: 7px 7px 7px 7px;
            text-decoration: none;
            }
           
        .nav li a:hover { background-color: #fff; }
        .nav li a:visited { color: #000; }
        .nav li a { color: #000;}
       
        .nav li {
            margin-left: 5px;
            list-style-type: none;
            float: left;
            }
           
       
       
        .main {
            height: 100px;
            }
           
        .standard {
            background-color: #dcdcdc;
            }
           
        .onpage {
            background-color: #7FFFD4;
            }
       
    </style>
</head>
<body>



<?php
    $menuLink = $_GET['page'];
    $startLink = basename($_SERVER['PHP_SELF'], ".php");
    $home = 'standard';
    $about = 'standard';
    $news = 'standard';
    $login = 'standard';
    $links = 'standard';
   
    if($menuLink == "home"){
        $home = 'onpage';
    } else if ($menuLink == "about"){
        $about = 'onpage';
    } else if ($menuLink == "news"){
        $news = 'onpage';
    } else if ($menuLink == "login"){
        $login = 'onpage';
    } else if ($menuLink == "links"){
        $links = 'onpage';
    } else if ($startLink == "index"){
        $home = 'onpage';
    }
?>


<div id="content">
    <div id="header">
        <ul class="nav">
            <li class="<?php echo $home; ?>"><a href="?page=home">Home</a></li>
            <li class="<?php echo $about; ?>"><a href="?page=about">About</a></li>
            <li class="<?php echo $news; ?>"><a href="?page=news">News</a></li>
            <li class="<?php echo $login; ?>"><a href="?page=login">Login</a></li>
            <li class="<?php echo $links; ?>"><a href="?page=links">Links</a></li>
        </ul>
    </div>
    <div class="main">
<?php
if (!empty($_GET)) {
    $allowedIncludes = array(
        'home' => 1,
        'about' => 1,
        'news' => 1,
        'login' => 1,
        'links' => 1
    );
    if ($allowedIncludes[$_GET['page']]) {
        include('include/'.$_GET['page'].'.php');
    }
} else {
    include('include/home.php');
}
?>
    </div>
</div>
</html>

Da jeg er ny til php, kan der sagtens være noget som kunne være skrevet bedre eller anderledes, men det fungerer ganske fint, sådan som jeg har skrevet det.
I må selvfølgelig gerne komme med råd.

Mit spørgsmål går på, at når jeg kører menuen via xampp lokalt på min pc, så kommer den med dette: 'Undefined index: page', men hvis jeg køre det via mit webhotel, så fungerer det bare fint.

Hvorfor melder den fejl via lokalt ?? normalt eller ?
Avatar billede claes57 Ekspert
30. april 2012 - 17:38 #1
din select...
  if($menuLink == "home"){
hvad, hvis der er en, der ikke findes - du skal nok afslutte med
    } else {
        $home = 'onpage';
så den fx dropper til startsiden hvis der opstår fejl, eller der er en, der forsøger at bryde ind.
Avatar billede olsensweb.dk Ekspert
30. april 2012 - 17:53 #2
Notice: Undefined index: page in C:\util\xampp\htdocs\test\eksperten\962161\index.php on line 58
$menuLink = $_GET['page']; // linje 58
variablen page findes ikke når du starter op, først når du trykker på et punkt kan get finde variablen.
at du ikke får fejl meldingen på dit webhotel kan skyldtes fejlmeldinger er slået fra
en løsning kunne værer lav dette
$menuLink = $_GET['page'];
om til
$menuLink = (isset($_GET['page']))? $_GET['page'] : "index.php";


ville det ikke være smartere at bruge en switch ??
switch($menuLink){
    case "home": $home = 'onpage'; break;   
    case "about": $about = 'onpage'; break;
    case "news": $news = 'onpage'; break;
    case "login": $login = 'onpage'; break;
    case "links": $links = 'onpage'; break;
    default: $home = 'onpage'; break; 
}
Avatar billede futte850 Nybegynder
30. april 2012 - 18:09 #3
$menuLink = (isset($_GET['page']))? $_GET['page'] : "index.php";
    $startLink = basename($_SERVER['PHP_SELF'], ".php");
    $home = 'standard';
    $about = 'standard';
    $news = 'standard';
    $login = 'standard';
    $links = 'standard';
   
    if($menuLink == "home"){
        $home = 'onpage';
    } else if ($menuLink == "about"){
        $about = 'onpage';
    } else if ($menuLink == "news"){
        $news = 'onpage';
    } else if ($menuLink == "login"){
        $login = 'onpage';
    } else if ($menuLink == "links"){
        $links = 'onpage';
    } else if ($startLink == "index"){
        $home = 'onpage';
    } else {
        $home = 'onpage';
    }
Så har jeg rettet lidt ind efter hvad i har sagt.

En anden ting..

Når man trykker på et link så kommer linien tile at se sådan ud: http://www.dummierun.dk/php/menu/?page=about

Er det bare sådan det er, eller kan man rette på det, så der ikke står ?page= bagved ?
Avatar billede futte850 Nybegynder
30. april 2012 - 18:11 #4
Skulle jeg heller bruge en switch eller har det nogen betydning. ?
Avatar billede olsensweb.dk Ekspert
30. april 2012 - 19:02 #5
>Skulle jeg heller bruge en switch eller har det nogen betydning. ?
det er betydelig nemmere at vedligeholde og overskue, at det så også performer bedre er en anden sag :), så det korte svar er JA

jeg har også lavet lidt om i din $allowedIncludes, med tilhørende code, bare til inspiration.
men jeg syntes ikke den block er særlig pæn, den må kunne skrives mere effektivt.

prøv denne
<!DOCTYPE html>
<html lang="da-DK">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <meta name="description" content="Portfolio AND Playground" />
    <meta name="keywords" content="Portfolio, Design, Profil" /> 
    <title>dummierun | Header Test</title> 
    <style type="text/css">     
        body {
            font-family: Helvetica, Arial, sans-serif;
            font-size: 11px;
        }         
        #header {
            height: 100px;
        }         
        .nav a {
            display: block;
            padding: 7px 7px 7px 7px;
            text-decoration: none;
        }         
        .nav li a:hover { background-color: #fff; }
        .nav li a:visited { color: #000; }
        .nav li a { color: #000;}     
        .nav li {
            margin-left: 5px;
            list-style-type: none;
            float: left;
        }     
        .main {
            height: 100px;
        }         
        .standard {
            background-color: #dcdcdc;
        }         
        .onpage {
            background-color: #7FFFD4;
        }     
    </style>
</head>
<body>
<?php   
    $menuLink = (isset($_GET['page']))? $_GET['page'] : "home";       
    $home = 'standard';
    $about = 'standard';
    $news = 'standard';
    $login = 'standard';
    $links = 'standard';
    // ændre css classen for selected
    switch($menuLink){       
        case "about": $about = 'onpage'; break;
        case "news": $news = 'onpage'; break;
        case "login": $login = 'onpage'; break;
        case "links": $links = 'onpage'; break;           
        default: $home = 'onpage'; break; 
    }
?>
<div id="content">
    <div id="header">
        <ul class="nav">
            <li class="<?php echo $home; ?>"><a href="?page=home">Home</a></li>
            <li class="<?php echo $about; ?>"><a href="?page=about">About</a></li>
            <li class="<?php echo $news; ?>"><a href="?page=news">News</a></li>
            <li class="<?php echo $login; ?>"><a href="?page=login">Login</a></li>
            <li class="<?php echo $links; ?>"><a href="?page=links">Links</a></li>
        </ul>
    </div>
    <div class="main">
<?php
if (!empty($_GET)) {       
    $allowedIncludes = array('home', 'about','news','login','links');   
    $pg=$_GET['page'];
    // hvis det ikke er en af de godkendte sider visses home.php
    if(in_array($pg,$allowedIncludes)){
        include('include/'.$_GET['page'].'.php');
    }
    else include('include/home.php');   
}
else {
    include('include/home.php');
}
?>
    </div>
</div>
</html>
Avatar billede olsensweb.dk Ekspert
30. april 2012 - 19:23 #6
som jeg sage før det kan skrives pænere, ryggede lige $pg op
<!DOCTYPE html>
<html lang="da-DK">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <meta name="description" content="Portfolio AND Playground" />
    <meta name="keywords" content="Portfolio, Design, Profil" /> 
    <title>dummierun | Header Test</title> 
    <style type="text/css">     
        body {
            font-family: Helvetica, Arial, sans-serif;
            font-size: 11px;
        }         
        #header {
            height: 100px;
        }         
        .nav a {
            display: block;
            padding: 7px 7px 7px 7px;
            text-decoration: none;
        }         
        .nav li a:hover { background-color: #fff; }
        .nav li a:visited { color: #000; }
        .nav li a { color: #000;}     
        .nav li {
            margin-left: 5px;
            list-style-type: none;
            float: left;
        }     
        .main {
            height: 100px;
        }         
        .standard {
            background-color: #dcdcdc;
        }         
        .onpage {
            background-color: #7FFFD4;
        }     
    </style>
</head>
<body>
<?php   
    $menuLink = (isset($_GET['page']))? $_GET['page'] : "home";       
    $pg=$menuLink;
    $home = 'standard';
    $about = 'standard';
    $news = 'standard';
    $login = 'standard';
    $links = 'standard';
    // ændre css classen for selected
    switch($menuLink){       
        case "about": $about = 'onpage'; break;
        case "news": $news = 'onpage'; break;
        case "login": $login = 'onpage'; break;
        case "links": $links = 'onpage'; break;           
        default:
            $home = 'onpage';
            $pg="home"; // home + forkert indtastede sider
        break; 
    }
?>
<div id="content">
    <div id="header">
        <ul class="nav">
            <li class="<?php echo $home; ?>"><a href="?page=home">Home</a></li>
            <li class="<?php echo $about; ?>"><a href="?page=about">About</a></li>
            <li class="<?php echo $news; ?>"><a href="?page=news">News</a></li>
            <li class="<?php echo $login; ?>"><a href="?page=login">Login</a></li>
            <li class="<?php echo $links; ?>"><a href="?page=links">Links</a></li>
        </ul>
    </div>
    <div class="main">
<?php
    include('include/'.$pg.'.php');
?>
    </div>
</div>
</html>
Avatar billede olsensweb.dk Ekspert
30. april 2012 - 21:23 #7
jeg har omskrevet #6 kraftigt inspiraret af http://www.eksperten.dk/spm/958957 #3 (dit eget spm)
<!DOCTYPE html>
<html lang="da-DK">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <meta name="description" content="Portfolio AND Playground" />
    <meta name="keywords" content="Portfolio, Design, Profil" /> 
    <title>dummierun | Header Test</title> 
    <style type="text/css">     
        body {
            font-family: Helvetica, Arial, sans-serif;
            font-size: 11px;
        }         
        #header {
            height: 100px;
        }         
        .nav a {
            display: block;
            padding: 7px 7px 7px 7px;
            text-decoration: none;
        }         
        .nav li a:hover { background-color: #fff; }
        .nav li a:visited { color: #000; }
        .nav li a { color: #000;}     
        .nav li {
            margin-left: 5px;
            list-style-type: none;
            float: left;
        }     
        .main {
            height: 100px;
        }         
        .standard {
            background-color: #dcdcdc;
        }         
        .onpage {
            background-color: #7FFFD4;
        }     
    </style>
</head>
<body>
<?php   
    $page = (isset($_GET['page']))? $_GET['page'] : "home";           
    $allowedIncludes = array('home', 'about','news','login','links');    
    if(! in_array($page,$allowedIncludes)){
        $page = "home"; // fanger fumlefingerede personer
    }   
    $menuHtml = array();
    foreach ($allowedIncludes as $k) {
        $class = $k==$page ? 'onpage' : 'standard';
        $menuHtml[] = '<li><a class="'.$class.'" href="?page='.$k.'">'.ucfirst($k).'</a></li>';
    }
    $menuHtml = '<ul class="nav">'.implode('', $menuHtml).'</ul>';
?>
<div id="content">
    <div id="header">       
    <?php
        // Udskriv menuen
        echo $menuHtml;
    ?>       
    </div>
    <div class="main">
<?php
        include('include/'.$page.'.php');
?>
    </div>
</div>
</html>

så kan du bruge den du syntes er pænest,
eller nemmest at forstå, du skal jo vedligeholde den, ikke os :)
Avatar billede Panen Nybegynder
01. maj 2012 - 11:15 #8
Lige en lille sidenote til brug af Switch.
Switch performer i alle tests jeg har set hidtil dårligere end if/else sætninger.

Så det er en grund til ikke at bruge det. Men jo det er pænere og mere overskueligt, og i langt de fleste tilfælde ikke mærkbart.
Avatar billede futte850 Nybegynder
06. juli 2012 - 13:02 #9
ronols smid svar
Avatar billede olsensweb.dk Ekspert
09. juli 2012 - 15:14 #10
får du her
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