Avatar billede rasmusc Nybegynder
12. juni 2006 - 23:09 Der er 8 kommentarer og
1 løsning

Dynamisk highlight af valgt menupunkt

Hejsa,

HVordan laver man dynamisk highligt af valgt menupunkt?

Det er vel noget med noget id="current" et sted i menuen. Fandt denne guide http://www.alistapart.com/articles/keepingcurrent/# men dels virker det ikke dels ligger mine sider i et array og bliver inkluderet ... så kan jeg jo ikke angive noget ThisPage i headeren.

Mit array ser således ud:

<?php
$valide_sider = array (
'forsiden',
'kontakt',
'anden_side'); ?>

men vil egentlig gerne lige lave det om til noget i retning af:

$validesider = array (
'index' => 'Forside',
'kontakt' => 'Kontakt',
'loen_og_regnskab' => 'Løn',
);

Det bliver måske (men ikke nødvendigvis) lidt mere kompliceret af at jeg har brug for en horisontal menu hvor hvert enkelt menupunkt udløser en lokal menu. Den horisontale menu kan muligvis laves vha af noget body id="side". Den del kan jeg dog godt undvære.

Der burde vel findes noget halløj der ordner den opgave.
Avatar billede jakobdo Ekspert
13. juni 2006 - 07:22 #1
Du kunne lave noget i stil med: http://www.codebreaker.dk/exp/715066.php
Avatar billede rasmusc Nybegynder
13. juni 2006 - 09:20 #2
Jo tak det ser sgu ret enkelt ud. Har lige et par spørgsmål for forståelsens skyld.

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

<?php
//http://www.eksperten.dk/spm/715066

$validesider = array (
    'index' => 'Forside',
    'kontakt' => 'Kontakt',
    'loen_og_regnskab' => 'Løn'
);

- ok, sådan et array har jeg set før og ser pointen i.

$menu = '';
$page = '';
$current = '';

- hvad gør tre ovenstående linjer?

switch($_GET['id'])
{
    case 'kontakt':
        $current = 'kontakt';
        $page .= 'Vi er på kontakt siden<br />';
        break;
    case 'loen_og_regnskab':
        $current = 'loen_og_regnskab';
        $page .= 'Vi er på løn siden<br />';
        break;
    default:
        $current = 'index';
        $page .= 'Vi er på forsiden<br />';
        break;
}

- ovenstående laver "brødkrummen" kan jeg regne ud. Det kan måske bruges, men jeg vil hellere have det ordnet via mappestrykturen på serveren (alternativt kan jeg helt undvære det)

foreach($validesider AS $key => $value)
{
    $menu .= ($current == $key)?'<b>'.$value.'</b><br />':'<a href="?id='.$key.'">'.$value.'</a><br />';
}

- ovenstående er vel det, der giver den dynamiske highligt. Men hvad gør hvad? Og hvad gør jeg når jeg skal have det hele smidt ind i en gang <ul> og <li>? Hvor indsætter jeg noget class-halløj hvis jeg via stylesheetet vil gøre det valgte menupunkt grønt i stedet for sort?

$menu .= '<hr />';

echo $menu;
echo $page;

echo '<hr />';
show_source(__FILE__);

?>

Og tillægsspørgsmålet: Kan man i denne:

case 'kontakt':
        $current = 'kontakt';
        $page .= 'Vi er på kontakt siden<br />';
        break;

indsætte en menu i stedet for "vi er på kontakt siden"? Det vil jo være en nem måde at styre sub-menuer fremfor at lave 5 skabeloner til hver sin submenu.

ras
Avatar billede jakobdo Ekspert
13. juni 2006 - 12:06 #3
Du kan lave:
echo '<ul>';
foreach($validesider AS $key => $value)
{
echo '<li>';
    $menu .= ($current == $key)?'<b>'.$value.'</b><br />':'<a href="?id='.$key.'">'.$value.'</a>';
echo '</li>';
}
echo '</ul>';
Avatar billede rasmusc Nybegynder
14. juni 2006 - 15:21 #4
ok jeg prøver,

Havde egentlig troet man kunne nøjes med noget som det her i menuen:

<li id="currentpage"><a href="#">Page Two</a>

ras
Avatar billede jakobdo Ekspert
14. juni 2006 - 18:23 #5
Det kan du også godt, hvis du altså laver en anden form for style på currentpage
Avatar billede rasmusc Nybegynder
14. juni 2006 - 20:38 #6
yes nu virker det ...

ras
Avatar billede jakobdo Ekspert
14. juni 2006 - 20:42 #7
Så får du et svar!
Avatar billede jakobdo Ekspert
15. juni 2006 - 12:33 #8
Takker for point.
Avatar billede rasmusc Nybegynder
15. juni 2006 - 16:53 #9
velbekomme ... men som du kan se har jeg fået nye problemer (der er 100 ekstra point der også) ;-)

ras
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