Aktiver Link

Hallo,

ich möchte auf meiner Seite den aktiven Link hervorheben. Also der Link, welcher zu der Seite führt, auf der sich der Besucher gerade befindet. Am liebsten wäre es mir, wenn dieser Link dann auch nicht mehr als Link nutzbar wäre. Der Link (Menü) wird durch include eingefügt.

Nach einigem Suchen fand ich folgenden Code:

[code]<?php
$scriptname =
preg_replace("/^.*//","",$_SERVER[‘SCRIPT_NAME’]);
?>

    <?php if($scriptname=="seite1.php") { ?>
  • Seite 1
  • <?php }else { ?>
  • Seite 1
  • <?php } ?> <?php if($scriptname=="seite2.php") { ?>
  • Seite 2
  • <?php }else { ?>
  • Seite 2
  • <?php } ?> <?php if($scriptname=="seite3.php") { ?>
  • Seite 3
  • <?php }else { ?>
  • Seite 3
  • <?php } ?>
[/code]

Ist dieser für mein Vorhaben empfehlenswert? Gibt es eine bessere Lösung?

Danke

Gruß elsner

Nein.

Statt zig mal den gleichen Code zu wiederholen, sollte man die für’s Menu benötigten Daten (Adresse, Linktext) in ein Array packen, und dieses dann in einer Schleife durchlaufen, in der man jeweils einen Menüpunkt ausgibt. In dieser kann man dann auch die Prüfung vornehmen, ob der aktuelle Menüpunkt mit dem ausgewählten übereinstimmt.

Einen aktiven Link per CSS auszeichnen?
a:activ…

Die Idee, keinen Verweis zur aktuellen Seite anzubieten
(weil das für einige Leute verwirrend sein kann), ist sicher schon
mal gut.

Ich verwende da allerdings auch eine Lösung mit arrays und
einem intern gesetzten Parameter, aus dem man schließen
kann, ob ein a-Element oder ein anderes Element um den
Text herum gesetzt wird - und was dann da als title-Attribut-Wert
etc eingesetzt werden muß.

Von der Länge und Verständlichkeit des Quelltextes her ist die
Lösung nicht unbedingt deutlich besser als alles in so einer
lustigen Fallunterscheidungskaskade aufzulösen.
Die Komplexität der array-Lösung steigt eben auch mit der
Komplexität dessen, was man da im Menü und im Verweis alles
drinstehen hat und was sich wirklich wie ändern soll.

Je nachdem, was in den Skript steht, kann der ausgegebene
Inhalt bei gleichem PHP-Skript ja auch unterschiedlich sein
(angeängte GET-Parameter) oder man könnte im Menü Verweise
zu Ankern im gleichen Dokument haben, so daß es nicht unbedingt
immer sinnvoll ist, den Namen des Skriptes so abzufragen. Hängt
aber stark davon ab, wie das Projekt strukturiert ist und wie
stark das Menü darauf eingeht.

Der Haken bei a:active ist ja jedenfalls, daß das weg ist, wenn
man auf der neuen Seite ist, jedenfalls nach Aktivieren eines
Verweises zu einer anderen URI.
Oftmals ist :active bei den browsern bei anderen Elementen
nicht implementiert, die auch aktiv sein können, weswegen man
das oft nur bei Verweisen kurz aufblitzen sieht.

Eine an sich andere und wie ich finde bessere Lösung ist, einen aktiven Link so auszuzeichnen, dass der Besucher selbstständig eine Unterscheidung feststellen kann, beispielsweiße eine andere Farbe oder eine andere Grafik - ihn unbedingt “nicht anklickbar” zu machen, das finde ich unnötig.

Andere Farbe oder Graphik ist ja bei (X)HTML nicht gegeben,
das wäre dann ja Dekoration (CSS). Gerade aber die Leute, bei
denen der überflüssige Verweis vermehrt Verwirrung auslösen
könnte (Nutzer von Text- oder Vorlese-browsern), nutzt es aber
gar nichts, wenn nur das ohnehin ignorierte CSS irgendwie anders
ist.

Eine Hilfe wäre es natürlich, wenn der browser sowas selbst
herausfiltern täte, eine solche Kompensation von
Autorenproblemen ist mir aber bislang von browsern oder
Formaten her nicht bekannt.

Danke für die Hinweise.

:active ist leider nichts für mich. Die Änderung des Links sollte nach dem Klicken auch noch angezeigt werden.

Leider habe ich von php keine Erfahrung und habe mich mal über arrays informiert. Aber wie kann ich mit einem array die Adresszeile auslesen? Soll der echo-Befehl dann eine Klasse, z.B. .aktiv, ausgeben im a-Tag?

Menü:

[code]










[/code]

[code]



    <?php $links = array( "index.php" => "Startseite", "fotogalerie.php" => "Fotogalerie", "videos.php" => "Videos", "agb.php" => "Nutzungsbedinungen", ); foreach ($links as $url => $text) { $is_active = ""; if ("/$url" == $_SERVER['PHP_SELF']) $is_active = ' class="active"'; echo "
  • $text
  • "; } ?>
     </ul>
  </div>
[/code]

[size=50]Das hier ist mein 1 Beitrag seit 1 Jahr.[/size]

de.selfhtml.org/css/eigenschafte … ormate.htm - a:visited ist das richtige für dein Vorhaben

nein ist es nicht -.-"

:visited (ist ein pseudoelement) hebt das vor, was schon bereits besucht wurde, jedoch nicht das aktive.

Siehe oben (meinen 1. Beitrag). Das ist die Lösung

a:active und a:visited - finito.

Ist und bleibt falsch.

:visited betrifft “alle” bereits besuchten Links, und :active gilt für den kurzen Moment, in dem du einen Link aktiviert hast (also bspw. vom Herunterdrücken der Maustaste bis zu dem Moment, in dem du sie wieder los lässt.)

Beides hat mit dem, was der Fragesteller erreichen möchte, herzlich wenig zu tun.

Dann habe ich wohl immer noch nicht verstanden, was der Fragesteller erreichen will :wink:

a:visited:active trifft auf bereits besuchte Verweise zu, die man
erneut anklickert (während man gerade klickert), nicht unbedingt
auf die aktuelle Seite, weil nach dem Laden der aktuellen Seite
ein Verweis auf die URI der aktuellen Seite in der Regel nicht als
aktiv angesehen wird.

:active ist auch nicht unbedingt nur ein kurzer Moment, bei
einer Formular-Eingabe ist ein Feld etwa solange aktiv, wie man
dort was eingeben kann. Ein Verweis ist aber in der Tat nur
so lange aktiv, wie das Klickereignis dauert, wobei das in CSS
ebenso wie :hover nicht exakt festgelegt ist, unter welchen
Umständen und von wann bis wann das genau zutrifft.

Er will das “übliche”* - dass auf jeder Unterseite der Link in der Navigation, der zu ihr führt, anders dargestellt wird; damit der Nutzer gleich weiss, “wo er ist”.

Dass man diesen Link am besten gar keinen Link sein lässt, wurde ja bereits angesprochen.

  • Nach dem im WWW schon zigtausend mal vorher gefragt worden ist, und für das auch entsprechend viele Lösungsvorschläge schon bereit stehen - man müsste sie nur mal suchen.

Danke für die Aufklärung, dann verstehe ich jetzt, was er erreichen will :wink:

Endlich ^^. Mein Skript war wohl das richtigste. Zum Glück hast du nicht gewettet. :ps: