Avatar billede sneska Nybegynder
21. september 2011 - 15:16 Der er 10 kommentarer og
1 løsning

PHP menu, markeret aktivt menupunkt

Hej , Jeg vil gerne lave en menu i php, som viser/markere det sted man er på siden. F.ex, hvis et menupunkt hedder kontakt, så skal den vise en anden style end de inaktive menupunkter.
Er der nogen der ved hvordan det kan gøres uden dynamisk menu ?

På forhånd tak :)
Avatar billede JensPeterSvensson Nybegynder
21. september 2011 - 16:38 #1
Du kan i teorien lave en statisk menu og style den med autogenereret css.

<html>
<head>
<style>
a[id=<?php echo $activeId;?>]{
  color:red;
}
</style>
</head>
<body>
<a href="#" id="m1">M1</a>
<a href="#" id="m2">M2</a>
</body>
</html>
Avatar billede sneska Nybegynder
21. september 2011 - 17:25 #2
Hej Jens, tak for svar :)

Det ser avancered ud for mig, har prøvet at lege med den med ved ikke hvad jeg skal gøre med id i links og hvor bliver $activeId brugt ? :\

Her er den jeg har til dynamisk menu ;
<?php
                if(isset($_GET['kat_id']))
                    {
                    echo '<span class="offlink"><a href="index.php">Forside</a></span>';
                    } else {
                        echo '<span class="onlink"><a href="index.php">Forside</a></span>';
                    }
                        $getMenu = mysql_query("SELECT * FROM djm_menu") or die(mysql_error());
               
                        while($row = mysql_fetch_assoc($getMenu))
                        {
                            if($_GET['kat_id'] == $row['menu_id']){
                                $style = "onlink";
                            }
                            else {
                                $style = "offlink";
                            }
                            echo '<span class="'.$style.'"><a href="index.php?kat_id='.$row['menu_id'].'">'.$row['menu_titel'].'</a></span>';
                        }
                    ?>
                   
Hvis jeg bare kunne pille if/elsen fra derinde, men kan ikke lige overskue det, synes jeg er kørt død i den..
Avatar billede JensPeterSvensson Nybegynder
21. september 2011 - 17:46 #3
Forstår ikke, hvorfor du vil fjerne if sætningen, den er formentlig ikke specielt dyr. Men dette burde virke.

Og et andet sted udskriver du:
<?php
echo 'span[id=m'.(isset($_GET['kat_id'])?$_GET['kat_id']:'forside').'{color:red;}'; 
?>

Din menu:
<?php
echo '<span id="mforside"><a href="index.php">Forside</a></span>';
$getMenu = mysql_query("SELECT * FROM djm_menu") or die(mysql_error());
while($row = mysql_fetch_assoc($getMenu)){
  echo '<span class="'.$style.'" id="m'.$_row['menu_id'].'"><a href="index.php?kat_id='.$row['menu_id'].'">'.$row['menu_titel'].'</a></span>';
}
?>
Avatar billede sneska Nybegynder
21. september 2011 - 17:58 #4
Den ser dynamisk ud hahah det må den ikke være, derfor ville jeg pille if'en fra , for at lave den statisk som du foreslog :)
Men jeg kunne ikke lige gennemskue den variablen inde i css'en, hvis du kan forklare mig den på basis sprog så ville jeg være meget taknemlig :)
Avatar billede JensPeterSvensson Nybegynder
21. september 2011 - 18:10 #5
I CSS vil denne erklæring:
span[attr=value]{

}

Blive påført alle span elementer med en attribut lig med value.

Derfor vil:
span[id=m1]{

}

blive påført det span element med id sat til m1.
<span id="m1">Me</span>

Du kan dermed style en menu dynamisk ved at lave. CSS dynamisk:
span[id=<?php echo $activeId;?>]{

}

Hvor php erklæringen udskriver id'et på det aktive element.
Avatar billede sneska Nybegynder
21. september 2011 - 19:17 #6
Så mangler jeg vel selv at definere at $activeId er = styleM1 ?
Avatar billede sneska Nybegynder
21. september 2011 - 19:34 #7
Jeg tror slet ikke jeg forstår hvordan det skal laves. Her er det jeg kom frem til;
<style>
            a[id=<?php echo $activeId;?>]{
              color:red;
            }
        </style>
</head>
    <body>
    <?php $activeId == "on" ?>
           
        <div id="menu">
            <ul class="menu">
                <li><a href="index.php"><span id="on">Forside</span></a></li>
                <li><a href="a.php"><span id="on">a</span></a></li>
                <li><a href="b.php"><span id="on">b</span></a></li>
                <li><a href="c.php"><span id="on">c</span></a></li>
            </ul>
        </div>
    </body>

Resultatet er at linket er rødt, når man trykker på det og ikke hele tiden så længe det er aktivt. Jeg er sikker på jeg har gjort noget forkert :))
Men mange tak for hjælp ! :)
Avatar billede JensPeterSvensson Nybegynder
22. september 2011 - 09:02 #8
aha det glemte jeg at sige.

Id'erne på linkene skal være unikke.

Dit aktive id vil være $_GET['kat_id'], så du kan i toppen af indeks.php skrive noget i retning af:

$activeId = 'm'.(isset($_GET['kat_id']))?$_GET['kat_id']:'forside';

css:
span[id=<?php echo $activeId;?>]{
  color:red;
}

menu linkene:
<a href="index.php"><span id="mforside">Forside</span></a>
<a href="index.php?kat_id=1"><span id="m1">M1</span></a>
<a href="index.php?kat_id=2"><span id="m1">M2</span></a>
Avatar billede sneska Nybegynder
22. september 2011 - 15:28 #9
Jeg kan ikke få det til at virke :( Den ønskede effekt jeg gik efter var at den link som er aktivt er en anden farve.
Har du afprøvet at dette virker ? Jeg tror snart jeg giver op :))
Mange tak igen :)
Avatar billede JensPeterSvensson Nybegynder
22. september 2011 - 16:17 #10
Det her er testede både i IE 8 og FF6

<?php
$activeId = 'm'.((array_key_exists('kat_id', $_GET))?$_GET['kat_id']:'forside');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style>
span[id=<?php echo $activeId;?>]{
  color:red;
}
</style>
</head>
<body>
<a href="index.php"><span id="mforside">Forside</span></a>
<a href="index.php?kat_id=1"><span id="m1">M1</span></a>
<a href="index.php?kat_id=2"><span id="m2">M2</span></a>
</body>
</html>
Avatar billede sneska Nybegynder
23. september 2011 - 18:27 #11
Fantastisk når det endeligt virker :)) super herligt, mange ydmyg tak herfra - hav' en skøn weekend !
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
Kurser inden for grundlæggende programmering

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