Avatar billede futte850 Nybegynder
07. marts 2012 - 23:10 Der er 15 kommentarer og
1 løsning

ang. switch funktion

Hejsa.
Jeg har denne test side:
http://www.dummierun.dk/test/phpswitch/
Når jeg trykker på hvert link vises der en side nedenunder.. Det fungerer optimalt.
Jeg ville så derfor gerne have, at det blå link skiftede plads alt efter hvilket link der er trykket på, har bare ikke kunnet få det til at fungerer.

index::::

<!DOCTYPE  html>
<html  lang="da-DK">
<head>

    <title>PHP | Switching |</title>

    <style type="text/css">

        body {
            font-family: Helvetica, Arial, sans-serif;
            font-size: 12px;
            }
           
        .nav {
            position: relative;
            top: 100px;
            left: 200px;
            }
       
        .menu li {
            list-style-type: none;
            float: left;
            margin-right: 10px;
            }
       
        .menu li a {
            text-decoration: none;
            }
           
        .switch {
            position: relative;
            top: 200px;
            left: 20px;
            }
       
        .activeLink {
            color: #7fd6ef;}
           
    </style>
</head>
<body>
    <div class="nav">
        <?php include 'include/header.php'; ?>
    </div>
    <div class="switch">
        <?php include 'switch.php'; ?>
    </div>
</body>
</html>

switch:::

<?php

$forside ="activeLink";
$portfolio ="myButtons";
$profil ="myButtons";
$links = "myButtons";
$feedback = "myButtons";

$array = ('forside, portfolio, profil, links, feedback');

if($array == "forside"){
    $index = 'activeLink';
} else if ($array == "portfolio"){
    $portfolio = 'activeLink';
} else if ($array == "profil"){
    $profil = 'activeLink';
} else if ($array == "links"){
    $links = 'activeLink';
} else if ($array == "feedback"){
    $feedback = 'activeLink';
}
?>
        <ul class="menu">
            <li><a class="<?php echo $forside; ?>" href="?page=forside">Forside</a></li>
            <li><a class="<?php echo $portfolio; ?>" href="?page=portfolio">Portfolio</a></li>
            <li><a class="<?php echo $profil; ?>" href="?page=profil">Profil</a></li>
            <li><a class="<?php echo $links; ?>" href="?page=links">Links</a></li>
            <li><a class="<?php echo $feedback; ?>" href="?page=feedback">Feedback</a></li>
        </ul>

header:::
<?php
if (!empty($_GET)) {
    $allowedIncludes = array(
        'forside' => 1,
        'portfolio' => 1,
        'profil' => 1,
        'links' => 1,
        'feedback' => 1
    );
    if ($allowedIncludes[$_GET['page']]) {
        include('include/'.$_GET['page'].'.php');
    }
} else {
    include('include/forside.php');
}
?>
Avatar billede amews_aj Nybegynder
07. marts 2012 - 23:16 #1
Slet din $array variabel, og I if'erne skal du sammenligne med $_GET['page'] i stedet.
Avatar billede amews_aj Nybegynder
07. marts 2012 - 23:19 #2
Og så er der lidt ekstra småting med din forside/index...

En lidt pænere løsning er nok at bruge en "switch":

switch($_GET['page']) {
  case "forside":
    $forside = "activeLink";
    break;
  ...
  case "feedback":
    $feedback = "activeLink";
    break;
  default:
    $forside = "activeLink";
    break;
}
Avatar billede olebole Juniormester
08. marts 2012 - 00:09 #3
<ole>

Der er ingen grund til at bruge en switch, når man kan bruge et hash table, som er hurtigere  =)

<?php
$allowedIncludes = array(
    'forside' => 1,
    'portfolio' => 1,
    'profil' => 1,
    'links' => 1,
    'feedback' => 1
);
$page = false;

if (!empty($_GET)) {
    $page = $allowedIncludes[$_GET['page']];
}
if (!$page) $page = 'forside';

$menuHtml = array();
foreach ($allowedIncludes as $k => $v) {
    $class = $k==$page ? 'activeLink' : 'myButtons';
    $menuHtml[] = '<li><a class="'.$class.'" href="?page='.$k.'">'.ucfirst($k).'</a></li>';
}
$menuHtml = '<ul class="menu">'.implode('', $menuHtml).'</ul>';
?>
<!DOCTYPE  html>
<html  lang="da-DK">
<head>
<!--
... ... ...
-->
</head>
<body>

<div class="nav">
<?php
// Udskriv menuen
echo $menuHtml;
?>
</div>

<div class="switch">
<?php
// Include siden
include('include/'.$page.'.php');
?>
</div>

</body>
</html>


/mvh
</bole>
Avatar billede amews_aj Nybegynder
08. marts 2012 - 00:19 #4
Det har du også fuldstændig ret i :)
Avatar billede rix Praktikant
08. marts 2012 - 01:26 #5
lige en ting
du har skrevet dette
if (!empty($_GET)) {
    $page = $allowedIncludes[$_GET['page']];
}


det er da en god idé at skrive såden her


if (!empty($_GET['page']) && in_array($_GET['page'], $allowedIncludes)){
$page =  $allowedIncludes[$_GET['page']];
}


på den måde er du sikker på at du har page i $_GET og at resultatet findes i $allowedIncludes.
Avatar billede futte850 Nybegynder
08. marts 2012 - 09:14 #6
olebole...

Jeg har testet din kode, dog med lidt blandet resultat.

Den printer menuen fint ud i starten.
Når jeg så trykker på portfolio skifter den blå farve ikke til portfolio, men forsvinder helt.
Og jeg får også en fejlmeddelse med, at den ikke kunne finde include/1.php, men jeg har jo ikke nogen fil der hedder sådan.
Avatar billede rix Praktikant
08. marts 2012 - 09:25 #7
$allowedIncludes = array(
    'forside' => 1,
    'portfolio' => 1,
    'profil' => 1,
    'links' => 1,
    'feedback' => 1
);

1 tallet i denne array skal du omskrive til dine sideres så hvis "foside" skal vise "forside_file.php" feks. skal den se sådan her ud

$allowedIncludes = array(
    'forside' => 'forside_file',
    'portfolio' => 1,
    'profil' => 1,
    'links' => 1,
    'feedback' => 1
);
Avatar billede futte850 Nybegynder
08. marts 2012 - 10:12 #8
Det fungere bare nu..
En lille ting mere, jeg brugte før include 'header.php';
Så jeg er lidt usikker på om det giver mig problemer fremover, at det hele er samlet på index sidden ??.
Avatar billede DeeDawg Nybegynder
08. marts 2012 - 10:17 #9
Og hvad forhindrer dig i, at beholde din header.php? :)
Avatar billede rix Praktikant
08. marts 2012 - 10:17 #10
hvis du bruger det system som olebole bruger så indcludere du alle sider i index.php så du kan godt bruge det du brugte i header.php og sætte ind i index.php
Avatar billede olebole Juniormester
08. marts 2012 - 13:01 #11
#5: Nej, det er ikke en god idé  =)

@futte850: Brug den kode, jeg skrev i #3, men ret til:

if (!empty($_GET) && $allowedIncludes[$_GET['page']]) {
    $page = $_GET['page'];
}

Så fungerer det fint og performer godt. Hvad du derudover har tænkt dig at gøre, kan jeg ikke vide noget om. Jeg har bare taget udgangspunkt i dit eget eksempel  =)
Avatar billede futte850 Nybegynder
08. marts 2012 - 14:54 #12
Det er korrekt, men som jeg kan se det har du fjernet include 'header.php';.

og i stedet lavet en echo fra det php script som ligger inde på index siden...

Og det er derfor jeg ikke lige kan se hvordan jeg får include på og om det overhoved er nødvendigt..!
Avatar billede olebole Juniormester
08. marts 2012 - 14:59 #13
Kun du selv ved, hvad meningen er med din 'header.php', og dermed om den er nødvendig. Der er intet i vejen for, at du kan skrive:

<div class="switch">
<?php
// Include siden
include('include/'.$page.'.php');
?>
</div>

- i din 'header.php' og så inkludere denne. Om det er hensigtsmæssigt, har jeg ingen anelse om  =)
Avatar billede futte850 Nybegynder
30. april 2012 - 17:03 #14
Smid et svar olebole
Avatar billede futte850 Nybegynder
06. juli 2012 - 13:03 #15
rix17172 smid svar
Avatar billede futte850 Nybegynder
20. august 2012 - 16:52 #16
Da rix17172 ikke vil give svar.. smider jeg selv et
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