• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

dynamischen Link erstellen

uzimann

Neues Mitglied
Hallo zusammen,

es geht um meine zentrale Navigation, die extern sowohl in der Startseite wie auch in Unterseiten geladen wird. Diese "navi.php" besteht aus dem Titel, darunter das Hauptmenü und darunter ein Bild, das ein PHP-Skript aus dem Bildarchiv zufällig auswählt.
Der Titeltext soll ein Hyperlink werden, der

a) auf der Startseite per Javascript ("javascript:location.reload()") den Zufallsgenerator startet, also ein neues Bild aus dem Archiv lädt
und
b) von Unterseiten, wie z.B. einem Kontaktformular, auf die Startseite verweist

Kann mir jemand sagen, wie ich also aus dem Titel einen dynamischen Link machen kann, der unterschiedlich verweist, je nachdem, in welcher Seite er gerade eingebunden ist?

Danke im Voraus und schönen Gruß in die Runde!


PS: Konkrete Codezeilen wären mir sehr willkommen, da ich noch ziemlicher Anfänger und nicht gerade ein Syntaxfuchs bin ;-)
 
Zuletzt bearbeitet:
Es wäre ebenso willkommen, wenn Du deinen Code zeigen würdest. Dann könnte man konkrete Tipps geben. So kann ich nur pauschal sagen:

PHP:
$linkziel = "index.php";
if( $_SERVER["REQUEST_URI"] == "index.php" ) {
 $linkziel = "javascript:location.reload();";
}
 
Ja klar, also "index.php" sieht so aus:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="format.css" />
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="Favicons/favicon.ico" />
<link rel="apple-touch-icon" href="Favicons/apple-touch-icon.png" />

<title>Titel</title>

</head>

<body>

<?php
include('navi.php');
?>

<div style="width:999px; padding-top:25px; margin-left:auto; margin-right:auto;>
<a href="index.php" title="Zufallsbild"><img src="Bilder/zufall.php" alt="Zufallsbild" /></a>
</div>

</body>
</html>

Und "navi.php" so:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="format.css" />
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="Favicons/favicon.ico" />
<link rel="apple-touch-icon" href="Favicons/apple-touch-icon.png" />

<title>Titel</title>

</head>

<body>

<div style="width:999px; margin-top:35px; margin-left:auto; margin-right:auto;">

<h1>Titel</h1>

<ul>
<li style="display:inline"><a href=„Link1“ target="_blank">Galerie</a></li>
|
<li style="display:inline"><a href=„Link2“ target="_blank">Blog</a></li>
|
<li style="display:inline"><a href="kontakt.php">Kontakt</a></li>
</ul>

</div>

</body>
</html>
 
Du weißt aber schon, dass Du dadurch nicht valide Code erzeugst? Du bindest in ein komplettes HTML-Grundgerüst nochmal ein HTML-Grundgerüst ein - schau dir mal an, was im Browser davon ankommt.

Tipp: reduziere navi.php auf das Nötigste.

Weiterhin ist deine Navigation falsch aufgebaut. Direkt innerhalb von <ul> darf nur <li> vorkommen, keine anderen Zeichen oder Elemente, wie z.B. der "|". Das ist falsch:

HTML:
<ul>
 <li style="display:inline"><a href=„Link1“ target="_blank">Galerie</a></li> 
 |

Das richtig:
HTML:
<ul>
 <li style="display:inline"><a href=„Link1“ target="_blank">Galerie</a></li>

Wenn Du dann als Trennzeichen noch einen senkrechten Strich willst, kannst Du den entweder innerhalb des <li> unterbringen oder per CSS als border-right/border-left angeben.

Somit sähe deine navi.php so richtig aus:
HTML:
<div style="width:999px; margin-top:35px; margin-left:auto; margin-right:auto;">
 <h1>Titel</h1>
 <ul>
<li style="display:inline"><a href=„Link1“ target="_blank">Galerie</a></li> 
<li style="display:inline"><a href=„Link2“ target="_blank">Blog</a></li> 
<li style="display:inline"><a href="kontakt.php">Kontakt</a></li>
</ul>
 </div>

Und: auf Inline-Style solltest Du verzichten. Ebenso auf die Verwendung des "target"-Attributs. Das habe ich jetzt aber nicht auch noch für dich korrigiert.

Und um deine Frage zu beantworten:
Schau dir o.g. PHP-Code von mir an. Den müsstest Du in navi.php einbinden, bevor dort irgendwas ausgegeben wird. $linkziel baust Du dann als Linkziel für die Überschrift ein. Also so:

PHP:
<h1><a href="<?php echo $linkziel; ?>">Titel</a></h1>
 
Vielen Dank schon mal bis hierher!

1. Um keine zwei HTML-Grundgerüste ineinander zu verschachteln, habe ich aus der navi.php jetzt den Seitentitel rausgenommen und in eine einer seperaten titel.php untergebracht, die dann oberhalb der Navigation von index.php aufgerufen wird.

index.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="format.css" />
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="Favicons/favicon.ico" />
<link rel="apple-touch-icon" href="Favicons/apple-touch-icon.png" />

<title>Titel</title>

</head>

<body>

<div style="width:999px; margin-top:35px; margin-left:auto; margin-right:auto;">

<?php
include('titel.php');
?>

<?php
include('navi.php');
?>

</div>

<div style="width:999px; padding-top:25px; margin-left:auto; margin-right:auto;>
<a href="index.php" title="Zufallsbild"><img src="Bilder/zufall.php" alt="Zufallsbild" /></a>
</div>

</body>
</html>
Ist es ok, die beiden php-Blöcke getrennt zu beschreiben, oder sollte/kann man die Angaben in einer <?php ... ?>-Klammer unterbringen?

titel.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="format.css" />
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="Favicons/favicon.ico" />
<link rel="apple-touch-icon" href="Favicons/apple-touch-icon.png" />

<?php
$linkziel = "index.php";
if( $_SERVER["REQUEST_URI"] == "index.php" ) {
$linkziel = "javascript:location.reload();";
}
?>

</head>

<body>

<h1><a href="<?php echo $linkziel; ?>">Titel</a></h1>

</body>
</html>

navi.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="format.css" />
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="Favicons/favicon.ico" />
<link rel="apple-touch-icon" href="Favicons/apple-touch-icon.png" />

</head>

<body>

<ul>
<li style="display:inline"><a href="Link1" target="_blank">Galerie</a></li>
<li style="display:inline">|</li>
<li style="display:inline"><a href="Link2"_blank">Blog</a></li>
<li style="display:inline">|</li>
<li style="display:inline"><a href="kontakt.php">Kontakt</a></li>
</ul>

</body>
</html>

War das so gedacht mit dem "Entschachteln"?

2. Die senkrechten Trennstriche in der <ul> in navi.php habe ich jetzt in zu eigenen <li>s gemacht (s.o.). Ist das in Ordnung?

3. Mir ist nicht klar, was gegen Inline-Style in der navi.php spricht? Sonst werden die Menüpunkte doch nicht (waagerecht) nebeneinander aufgelistet, wie ich es gerne hätte...
Und warum kein "target"-Attribut? Wie kann ich sonst bewirken, dass die Linkziele in einem neuen Fenster/Tab geöffnet werden?
 
1. Um keine zwei HTML-Grundgerüste ineinander zu verschachteln, habe ich aus der navi.php jetzt den Seitentitel rausgenommen und in eine einer seperaten titel.php untergebracht, die dann oberhalb der Navigation von index.php aufgerufen wird.

Bitte lies dir meinen vorherigen Beitrag nochmal aufmerksam durch. Ich habe dir sogar den Code genannt der in navi.php stehen darf - nicht mehr und nicht weniger darf dort rein.

War das so gedacht mit dem "Entschachteln"?

Mit Sicherheit nicht.

2. Die senkrechten Trennstriche in der <ul> in navi.php habe ich jetzt in zu eigenen <li>s gemacht (s.o.). Ist das in Ordnung?

Nein, nicht wirklich. Dadurch erzeugst Du nicht korrekten semantischen HTML-Code. Quasi erzeugst Du Menüpunkte die gar keine sind, auch wenn es visuell natürlich anders aussieht. Auch dazu hatte ich dir oben schon die Möglichkeiten genannt.

3. Mir ist nicht klar, was gegen Inline-Style in der navi.php spricht? Sonst werden die Menüpunkte doch nicht (waagerecht) nebeneinander aufgelistet, wie ich es gerne hätte...

Inline-Style sollte an keiner Stelle im HTML-Code stehen. Das hat nicht mit irgendeinem Bereich zu tun, sondern mit jeglichem HTML-Code. Alle Style-Angaben sollten in eine externe CSS-Datei.

Und warum kein "target"-Attribut? Wie kann ich sonst bewirken, dass die Linkziele in einem neuen Fenster/Tab geöffnet werden?

Gar nicht. Das ist Entscheidung des Besuchers deiner Webseite. Bei mir öffnen solche Links bspw. immer im aktuellen Tab, weil ich meinen Browser so eingestellt habe. Wenn ich möchte, dass ein neues Tab aufgeht, dann wähle ich mir das selbst aus.
 
Also, habe jetzt die Trennstriche per border-left im externen CSS festgelegt (sehen auch besser aus als die "getippten") und ebenso den Inline-Style.
Auch die target-Attribute hab ich rausgenommen – beides einleuchtend.

Nicht sicher bin ich mir bei deinem Kommentar zum Entschachteln: Ich dachte, prinzipiell hätte ich deinen ursprünglichen Rat befolgt, in dem in der navi.php wirklich nur die <ul> steht und der Titel in einer eigenen Datei. Liegt da schon ein Missverständnis, oder bezog sich das "Mit Sicherheit nicht" vielleicht auf die unsauberen Trennstriche oder auf die zwei PHP-Blöcke in index.php?


Die navi.php sieht momentan so aus:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="format.css" />
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="Favicons/favicon.ico" />
<link rel="apple-touch-icon" href="Favicons/apple-touch-icon.png" />
</head>

<body>
<ul>
<li"><a href="Link1">Galerie</a></li>
<li><a href="Link2">Blog</a></li>
<li><a href="kontakt.php">Kontakt</a></li>
</ul>
</body>
</html>

Die <div>-Angaben aus deinem Vorschlag hab ich ja schon in index.php stehen (, so dass die Liste von da aus positioniert wird).
Weniger geht doch nicht, oder? Pardon, wenn ich immer noch auf dem Schlauch stehe, aber ich bemühe mich wirklich!

Und dann habe ich vorhin meine Ursprungsfrage zum dynamischen Link ganz vergessen:
Wenn ich deinen PHP-Code einbaue (s. voriger Post > titel.php), leitet zwar der Link von kontakt.php aus wie gewünscht auf die Startseite (index.php), aber wenn ich auf denselben Link auf der Startseite klicke, lädt die Seite nicht richtig nach, d.h. dass der Zufallsgenerator in zufall.php kein anderes Bild auswählt und die Startseite sich nicht verändert. Das passiert erst, wenn man per Browser die Seite aktualisiert...
 
Ich zitiere nochmal meinen Code für deine navi.php von oben abzüglich dem Target und den Inline-Styles:

HTML:
<div>
 <h1>Titel</h1>
 <ul>
<li><a href=„Link1“>Galerie</a></li> 
<li><a href=„Link2“>Blog</a></li> 
<li><a href="kontakt.php">Kontakt</a></li>
</ul>
 </div>

Erkennst Du den Unterschied?

Deine Frage wg. dem Link kann ich nicht wirklich nachvollziehen. Kann man sich das nicht irgendwo anschauen?
 
Ich sehe den Unterschied darin, dass um die <ul> noch eine "<div> ... </div>"-Klammer steht. Richtig?
Die würde ich dann auch in der separaten titel.php einfügen (, wo das "<h1>Titel</h1>" aus deinem Beispiel jetzt auftaucht).

titel.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="format.css" />
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="Favicons/favicon.ico" />
<link rel="apple-touch-icon" href="Favicons/apple-touch-icon.png" />

<?php
$linkziel = "index.php";
if( $_SERVER["REQUEST_URI"] == "index.php" ) {
$linkziel = "javascript:location.reload();";
}
?>

</head>

<body>

<div>
<h1><a href="<?php echo $linkziel; ?>">Titel</a></h1>
</div>

</body>
</html>

navi.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="format.css" />
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="Favicons/favicon.ico" />
<link rel="apple-touch-icon" href="Favicons/apple-touch-icon.png" />

</head>

<body>

<div>
<ul>
<li><a href="Link1">Galerie</a></li>
<li><a href="Link2">Blog</a></li>
<li><a href="kontakt.php">Kontakt</a></li>
</ul>
</div>

</body>
</html>

Was den Link betrifft, da habe ich leider bisher nichts gefunden (, das ich nachvollziehen und anpassen könnte). Deshalb hab ich mich an dieses Forum gewandt. Aber auch, wenn sich das hier nicht lösen lässt, haben meine Seiten ja schon davon profitiert und ich hab was dazugelernt :-)
Danke für die schnellen und geduldigen Antworten!
 
Vergleiche mal bitte folgende Codes die dem Inhalt der Datei navi.php entsprechen sollen:

Deiner:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 
<head>
 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="format.css" />
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="Favicons/favicon.ico" />
<link rel="apple-touch-icon" href="Favicons/apple-touch-icon.png" />
 
</head>
 
<body>
 
<div>
<ul>
<li><a href="Link1">Galerie</a></li> 
<li><a href="Link2">Blog</a></li> 
<li><a href="kontakt.php">Kontakt</a></li>
</ul>
</div>
 
</body>
</html>

Meiner:
HTML:
<div>
 <h1>Titel</h1>
 <ul>
<li><a href=„Link1“>Galerie</a></li> 
<li><a href=„Link2“>Blog</a></li> 
<li><a href="kontakt.php">Kontakt</a></li>
</ul>
 </div>

Fällt dir immernoch nichts auf?

Noch ein Tipp: Wenn Du die Seite im Browser anschaust, lass dir mal mit Strg + U den Quellcode der angezeigten Seite anzeigen. Dann wirst Du, wenn sehen, dass Du 2 Doctypes in deinem Quellcode hast. Ist das richtig? Nein. Daher nochmal mein Hinweis auf meinen Code für Deine navi.php.
 
Zurück
Oben