webForumDet fria alternativet

Sidan man är på

PHP

8 svar · 346 visningar · startad av Tinwëlint

Medlem sedan maj 2004451 inlägg
Frågan#1

För tillfället har jag några sidor som inte alls är databasorienterade på något vis (eftersom jag inte kan det). Det jag skulle vilja ha är en enkel funktion som ger länken till sidan man är på i menyn en viss klass så att man kan styla den annorlunda. Finns det något smidigt sätt?

Medlem sedan mars 20032 667 inlägg
#2

Vill du ha ut filnamnet eller vad vill du jämföra med för värde?

Filnamnet:
<?php
print $_SERVER['PHP_SELF'];
?>
Medlem sedan maj 2004451 inlägg
#3

Ja jag vill nog jämföra filnamnet med länkarna i menyn. Om nån stämmer överens så ska den länken tilldelas en viss class.

Medlem sedan mars 20032 667 inlägg
#4
<?php
if($_SERVER['PHP_SELF'] == "firstpage.php") { $cssClass = "firstPageClass"; }
?>
<a href="firstpage.php" class="<?php print $cssClass; ?>">Förstasidan</a>
Medlem sedan maj 2004451 inlägg
#5

Nej inte så, förlåt om jag har varit otydlig.

Scriptet ska helst titta igenom länkarna i menyn, kolla om någon av deras href stämmer överens med
['PHP_SELF'] för att om det är så tilldela den länken en class (som kan vara samma för alla för den ska bara ge länken till sidan man är på ett speciellt utseende).

Medlem sedan aug. 20002 975 inlägg
#6

Men är det inte det K@llen i princip har gjort ?

Ett exempel:

$menu = array(
   '/index.php' => 'Start',
   '/guestbook/index.php' => 'Gästbok',
   '/another.php' => 'Annan sida'
);

foreach ($menu as $link => $text) {
   $class = ($link == $_SERVER['PHP_SELF']) ? 'menu_active' : 'menu';
   echo "<a href=\"$link\" class=\"$class\">$text</a><br>\n";
}
Medlem sedan maj 2004451 inlägg
#7

Jo men som jag tolkade K@llens kod så måste man ju skriva en if-sats för varje menyalternativ (jag kanske tolkade fel förstås).
Din fungerade i alla fall solklart!
Men om jag vill ha ett attribut till i arrayen för varje menyalternativ
som:

'/index.php' => 'Start' => 'Startsidan',

foreach ($menu as $link => $text => $title) {
   $class = ($link == $_SERVER['PHP_SELF']) ? 'menu_active' : 'menu';
   echo "<a href=\"$link\" class=\"$class\" title=\"$title\">$text</a><br>\n";

så fungerer inte det sättet (vet väldigt lite om php) Men hur ska jag göra då?

Medlem sedan aug. 20002 975 inlägg
#8

Då kan du göra så här:

$menu = array(
   array('link'=>'/index.php', 'text'=>'Start', 'title'=>'Startsidan'),
   array('link'=>'/guestbook/index.php', 'text'=>'Gästbok', 'title'=>'Min gästbok'),
   array('link'=>'/another.php', 'text'=>'Annan sida', 'title'=>'Ingen av de andra')
);

foreach ($menu as $row) {
   $class = ($row['link'] == $_SERVER['PHP_SELF']) ? 'menu_active' : 'menu';
   echo "<a href=\"{$row['link']}\" class=\"$class\" title=\"{$row['title']}\">{$row['text']}</a><br>\n";
}

Eller om du inte vill använda beskrivande index i arrayerna:

$menu = array(
   array('/index.php', 'Start', 'Startsidan'),
   array('/guestbook/index.php', 'Gästbok', 'Min gästbok'),
   array('/another.php', 'Annan sida', 'Ingen av de andra')
);

foreach ($menu as $row) {
   $class = ($row[0] == $_SERVER['PHP_SELF']) ? 'menu_active' : 'menu';
   echo "<a href=\"$row[0]\" class=\"$class\" title=\"$row[2]\">$row[1]</a><br>\n";
}

I bägge alternativen kan du sedan lägga till fler attribut om du vill.

Medlem sedan maj 2004451 inlägg
#9

Tack!

259 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)