Antworten zu häufig gestellten Homepage-Fragen
 Alle Anleitungen
Einige Anleitungen
Intern
Kostenl. Partnerlinks
[,__,] Druckversion

Hinweis: Die Website Homepage-FAQs.de befindet sich seit 2012 im Archivmodus, d.h. sie wird nicht mehr aktualisiert.
FAQS zu HP&Co.
PHP-Menü - einmal Seite mit Design / Menü und includen von Inhalten
(erstellt im Januar 2004, zuletzt geändert bzw. erweitert im Januar 2011)


Das Grundprinzip:

Der Code des PHP-Menüs wird in der Homepage (tabellenbasiert oder CSS-Layout) an die Stelle gesetzt, an der die unterschiedlichen Inhalte der Homepage hin sollen, der Webserver (der PHP unterstützen muss) ersetzt diesen Code durch die Inhaltsdatei, also fügt den Inhalt ein und schickt die Gesamtdatei (Homepage mit Inhalt) an den Browser, der sie anzeigt.

Das Prinzip:

A) Es wird nur eine Homepageseite mit dem ganzen Design und den Menülinks gemacht. Bei Änderungen des Design oder neuen Menülinks muss nur diese eine Datei geändert werden, also nicht wie sonst bei tabellenbasierten Homepages auf jeder Seite. Somit wird es so einfach wie sonst bei Frameseiten, ohne deren Nachteile.

B) Die unterschiedlichen Inhalte der Seiten werden in separaten Dateien erstellt ohne Design, also nur der reine Inhalt. Damit sind diese Dateien klein und weitere Inhaltsseiten schnell gemacht.

C) Die Homepageseite wie bei A und der Inhalt wie bei B ergeben, wenn der Webserver den Inhalt in die Homepage einfügt (includet), eine normale Homepagedatei.

5 Varianten:

Variante 1 und Erweiterung zu Variante 1 (verschiedene Titel und Metatags für die einzelnen Seiten)
sowie
Variante 2
Variante 1 und 2 sind vom Prinzip her ähnlich. Variante 2 ist die gängige Variante und sicher (ebenso wie Variante 3 und 4), da festgelegt wird welche Dateien includet werden. Variante 1 ist nicht ganz so sicher, dafür eignet sie sich für sehr viele Seiten und die Homepage kann schnell um weitere Links, auch auf Unterseiten, erweitert werden.
Im Homepagedesign wird an der Stelle, wo später der Inhalt hin soll der Code des PHP-Menüs eingebaut


Variante 3
Geeignet zum includen von Foren, Gästebücher u.ä. Scripten, wenn Variante 2 (bzw. Variante 1) zu grosse Probleme macht.
Hier wird das Homepagedesign um den Inhalt "herum" gebaut, d.h. der Quelltext wird geteilt in Header und Footer, diese Teile werden dann in der Inhaltsdatei am Anfang und am Ende includet.
Anmerkung: Die beiden externen Links unten können als Ersatz meiner kurz gefassten Variante 3 angesehen werden, wenn es nicht um das Includen von Foren, Gästebücher u.ä. Scripten geht.

Variante 4
Wenn nur die Navigation oder News bzw. beides dazu gesetzt werden soll, am ehesten wohl bei Scripten geeignet, falls dort die Homepagenavigation (Menü) und/oder News hinzugefügt werden soll.
Hier wird auf allen Seiten der gleiche kurze Readfile-Befehl fürs Menü eingebaut und das Menü ist dann separat in einer einzigen Datei, was Änderungen am Menü ganz einfach macht. Das Design der Seite ist dann auf jeder Seite, aber das Menü nicht, sozusagen statt einer Frameseite.
Beim Designwechsel, vor allem bei vielen Seiten, ist diese Variante sehr aufwändig.

Variante 5
Ist ähnlich den Varianten 1 und 2, nur dass es hier eine Liste der Menüpunkte gibt, die einerseits der Prüfung und andererseits der Menüerstellung dient. Daher gibt es zusätzlich einen Code für die Menüerstellung, der gleichzeitig den aktuellen Menüpunkt markiert, damit Besucher wissen auf welche Seite sie sind.
Die Variante 5 kann schon genutzt werden. Die Codes und kurze Infos sind schon vorhanden, eine ausführliche Erklärung folgt bei Bedarf.

Weitere Varianten: (externe Links)

http://www.csc-oldenburg.de/csc_links.php?tut=grund_php

http://www.homepage-total.de/php/seiten_generieren.php

Anmerkung:
Ähnlich wie Variante 3, aber besser für SEO (Suchmaschinenoptimierung), wenn es für normale Webseiten genutzt werden soll.

http://www.die-seite.eu/wm-phpscript-navi01.php

Anmerkung: Ähnlich wie Variante 5, einfach beide testen, um zu sehen welche besser passt bzw. verständlicher ist.


Seiten mit PHP-Code offline am PC testen

Wer die Varianten erstmal auf dem PC testen will, bevor sie auf den Webspace hochgeladen werden, der kann XAMPP (Testserver mit PHP, MySQL-Datenbank und mehr) auf dem eigenen PC installieren, siehe meinen Beitrag

XAMPP - Test-Server für PHP und MySQL auf dem PC installieren, Probleme mit Vista und PHP 5.3

Sollte es mit XAMPP Probleme geben, dann einfach auf dem Webspace ein Testverzeichnis einrichten und dort hinein die Website hochladen.

Der Unterschied zu id=5

Das Prinzip ist wohl dasselbe bei index.php?site=mein-urlaub2008 und index.php?id=12345, nur dass Zahlen schlecht für SEO (Suchmaschinenoptimierung) sind, so dass hier oft (z.B. in Blogscripten wie Wordpress) zusätzlich mod_rewrite eingesetzt wird, um diese Zahlen zu vermeiden.

Bei dieser FAQs-Seite hier wird ein "PHP-Menü" ähnlich wie Variante 1 verwendet.

Statt index.php?site=anleitung-php-menue könnte hier auch index.php?site=12345 verwendet und die Inhaltsdateien durchnummeriert werden, aber welches Sinn hätte das bei manueller Erstellung? Besser ist es bei manueller Erstellung wie auch für SEO, wenn die "Keywords" auch im Link stehen.

Natürlich könnten auch die Varianten bei "Weitere Varianten: ..." benutzt werden, hier sind die Adresse index.php, kontakt.php, impressum.php usw. - Sinn und Zweck ist desselbe wie oben mit index.php?site=anleitung-php-menue und index.php?site=12345.

Ein Unterschied ist eher, ob manuelle Seitenerstellung mit HTML- / Webeditor und "PHP-Menü" oder CMS- bzw. Blogscripte.

URL / HTTP-Adresse bei Include und Readfile

Bei vielen Webspaces ist keine URL (http-Adresse) bei Include erlaubt, in dem Fall Pfad-/Dateiangaben verwenden.

Bei Readfile kann eine URL als Dateinamen verwendet werden, falls fopen wrappers bei php.ini* ermöglicht wurde.

*Bei vielen Webspaces gibt es keinen Zugriff auf die php.ini - den hat der Hostinganbieter.

Die erste Variante des PHP-Menüs:
(überarbeitet Dezember 2007, Juni 2008, Code bei B)3) hinzugefügt Oktober 2010)

Ein kürzere Variante 1 gibts von Ingo http://www.1ngo.de/web/ im homepage-forum.de unter

http://www.homepage-forum.de/showpost.php?p=186323&postcount=19

dabei kann der Dateiname auch gleich als Homepagetitel verwendet werden.

Von Ingos Code wird...

A) dieser Abschnitt

<?php // erwartet wird ?seite=xxx oder 'seite' im POST-Array 
  $seite = (isset($_REQUEST['seite']) &&  $_REQUEST['seite']) 
  ? $_REQUEST['seite'] : 'news'; 
  if(strpos($seite,'/')) die('Hackversuch!'); // "../" verhindern 
  if (!is_file('inhalte/'.$seite.'.php')) { 
    header("HTTP/1.0 404 Not Found"); $seite = '404'; 
  } 
?>


an den Anfang der index.php gesetzt.

Hinweis: Die Inhaltsdateien werden in das Unterverzeichnis inhalte gelegt. Bei den Pfadangaben für Bilder und Grafiken ist aber von dem Verzeichnis auszugehen, in dem die index.php liegt.

B)1) dieser Teil

<title><?php echo $seite; ?> - Mein Homepagename</title>

2) oder diesen Teil, falls innerhalb des Dateinamens etwas ersetzt werden soll, z.B. das - Minuszeichen durch ein Leerzeichen

<title><?php $title = str_replace("-", " ", $seite); echo $title; ?> - Meine Homepage</title>

3) oder diesen Teil, wenn mehrere Teile des Dateinamens ersetzt werden sollen, z.B. Kategoriekürzel und das - Minuszeichen

<title>
<?php
$anfang = array("hp-", "php-", "js-");
$title = str_replace($anfang, "", $seite);
$title = str_replace("-", " ", $title);
echo $title;
?> - Meine Homepage</title>

in den Headbereich (statt des normalen <title>....</title>).

Wichtig: Wegen Suchmaschinenoptimierung (SEO) sollten die wichtigen Keywords vorne im Title-Tag stehen, je weniger Keywords desto besser.

Anmerkung: Falls Teil B) Probleme macht, dann nur <title>Meine Homepage</title> verwenden, allerdings ist das für SEO nicht so gut.

C) und dieser Teil

<?php require('inhalte/'.$seite.'.php'); ?>

an die Stelle in der index.php wo die Inhalte hinkommen.

Die Links sehen dann so aus

<a href="index.php?seite=NAME" class="nav">LINKNAME</a>

Hinweis: Bei NAME den Dateiname der Inhaltsdatei ohne die Endung .php angeben und bei LINKNAME den Linktext oder den IMG-Tag für einen Menübutton eintragen.

Erweiterung zu Variante 1

Anfrage per Mail wegen verschiedener Titel und Metatags für die einzelnen Seiten.


Meine Lösungen zu den Fragen:

A) Wie mache ich einen eigenen Titel und eigene Metatags?

Zusätzlich könnte man im Headbereiche auch den PHP-Code verwenden, aber statt den Inhalten die entsprechenden Metatags einlesen, z.B.

<head>
<?php readfile('meta/'.$seite.'.txt'); ?>
</head>

dafür wären im Verzeichnis meta zu jeder Inhaltsdatei eine Textdatei mit den Metatags erforderlich.

B) Es kommt ein Fehler wenn ich meine Startseite ohne Zusatz aufrufe, warum?

Bei Ingos Code wird news eingesetzt, falls index.php ohne Zusatz ist, also müsste

B)1) news.php auf der Startseite bei Inhalt includet und

B)2) news.txt bei <head> eingelesen werden.

Die Fehlermeldung wird unterdrückt, wenn ein @ vor dem PHP-Befehl steht, z.B.

<head>
<?php @readfile('meta/'.$seite.'.txt'); ?>
</head>

Ich hoffe meine Lösungen sind verständlich, sonst nachfragen.


Anmerkung: Habe die Variante 1* entfernt, da der Code von Ingo kürzer und sicher ist.

(*basierte auf einem Beitrag von DrWeb (aus Sicherheitsgründen inzwischen veraltet) und war von mir um einige Funktionen und Sicherheitselemente erweitert worden)

Eine zweite Variante des PHP-Menüs:

Beispielcode:

<?php

    if (isset($_GET['go']))
    {
        switch($_GET['go'])
        {

            case 'home':    include('home.htm');
                            break;

            case 'fotos':  include('fotos.htm');
                            break;

            case 'hobbys':    include('hobbys.htm');
                            break;

            case 'impressum':  include('impressum.htm');
                            break;

            default:        include('home.htm');
        }
    }
    else
    {
        include('home.htm');
    }

?>

und die Links gehen so:

<a href="index.php?go=fotos">Fotos</a>

Hinweis:

Bei case 'home' wird beispielsweise der Name festgelegt, der bei den Links in ?go=home angegeben wird und bei include('home.htm'); wird der Dateinamen (und evtl. der Ordner) der Datei eingetragen, die includet wird.

Bei der Zeile default: include('home.htm'); wird die Datei angegeben, die bei Aufruf der Homepage z.B. www.meine-seite.de/index.php includet wird, ebenso bei else ... include('home.htm'); nochmals.

Beispiel für include('home.htm'):

home.htm im gleichen Ordner wie die index.php, dann include('home.htm');

home.htm im Unterordner inhalt, dann include('inhalt/home.htm');

Wichtig:

>> Die Seite mit dem PHP-Code hat die Endung .php, auch wenn sie in Html geschrieben ist, dies ist erforderlich, damit der Server weiß, daß in der Datei PHP-Code ist.

>> Der Webspace muß natürlich PHP unterstützen.

Erweiterung zu Variante 2

A) Aktualierungsdatum der includeten Dateien anzuzeigen

Dazu müssen dann die Case-Abschnitte so aussehen

case "home":
   $filename = 'home.htm';
   $lastupdate = filemtime($filename);
   include($filename);
   echo "Aktualisiert am: ", date(" d.m.Y H:i", $lastupdate);
   break;

Hinweis: Die rot markierten Teile können angepasst werden, die anderen Teile nur bei ausreichenden PHP-Kenntnissen.

Variante 3: Inhaltsdateien mit include von Header und Footer.

Wenn das Gästebuch im Homepage-Design angezeigt werden soll, dann gibt es die einfache Methode Iframe (für GB bei Anbietern oder PHP-Scripte auf dem eigenen Webspace) oder den PHP-Befehl include.

Da es meist nicht geht eine http-Adresse zu includen, da dies oft deaktiviert ist.

Und es auch meist nicht machbar ist ein Gästebuch-Script auf dem eigenen Webspace per einfachem Include-Befehl

<?php include("gb/gbook.php"); ?>

ins HP-Design zu includen, weil es da oft Konflikt mit den Pfaden gibt.

Eine andere Include-Methode, die man mal testen kann, geht vereinfacht gesagt so:

Im HP-Design (tabellenbasiert) wird in der Tabellenzelle, wo das GB rein soll z.B.

###hier_code###

geschrieben, dann im Quelltext vom Anfang bis zu ### alles in header.html und von ### bis zum Ende alles in footer.html, hat man das, dann in der PHP-Datei des GBs am Anfang dieses einfügen

<?php include("header.html"); ?>

und am Ende das

<?php include("footer.html"); ?>

Damit lassen sich etliche PHP-Scripte ins HP-Design einbinden, besser gesagt die Homepage ums Script herum bauen.

Frage: Das Weblog gefällt mir, funktioniert ganz gut, aber wie binde ich den jetzt z.B in meiner Homepage ein?

Hallo,


habe jetzt mit dem Weblog keine Erfahrung. Der Hinweis soll wohl bedeuten das man seine Seite um das Weblog herum machen kann, also z.B. die Homepagedatei nehmen und in der Tabellenzelle, wo das Weblog angezeigt wird mal

### mein weblog ###

schreiben, jetzt kann die Homepagedatei geteilt werden:

1.) Alles von Anfang bis vor ### mein weblog ### wird als header.html gespeichert

2.) Alles nach ### mein weblog ### bis zum Ende wird als footer.html gespeichert

In der Weblog-Datei diese Zeile

// Here you could include a footer --> include("footer.html");

durch

<?php include("footer.html"); ?>

ersetzen und weiter oben gibt es eine ähnliche Zeile für Header

// Here you could include a header --> include("header.html");

durch

<?php include("header.html"); ?>

ersetzen.

Alle Ausführungen/Überlegungen sind theortischer Art, mal testen ob es klappt.

daniel5959

Variante 4: Include der Navigation

Prinzip / Voraussetzungen:

Statt der Navigation würde ein PHP-Readfile-Code da stehen und der HTML-Navigationscode würde in die Datei navi.html ausgelagert.

Alle HTML-Dateien bekommen die Endung .php (oder der Webspace wird per .htaccess so eingestellt, dass die Dateiendung .html bleiben kann).

Der Webspace muss PHP unterstützen.

Kurzanleitung:

Ganz normal die Seite in HTML / CSS erstellen (z.B. mit Web- bzw. HTML-Editor) und im Browser testen.

Wenn alles ok ist, dann den Navigationscode im Quelltext ausschneiden und stattdessen den Readfile-PHP-Code rein (siehe unten), die Dateiendung in .php ändern und speichern.

Nun den ausgeschnittenen Navigationscode in eine leere Datei einfügen und als navi.html speichern.

PHP-Readfile-Code:

<?php readfile("navi.html"); ?>

Bei Änderungen am Menü muss nun nur noch eine Datei, eben die Datei navi.html geändert werden und da sie bei allen Seiten eingelesen (readfile) wird, erscheint das geänderte Menü auf allen Seiten.

Variante 5
(Erstellt April 2007, Fehler korrigiert und Musterseite als ZIP hinzugefügt März 2010)

Musterseite (um das Prinzip verständlicher zu machen)

http://www.homepage-faqs.de/zip/einfache-musterseite-php-menue-variante5.zip

Anmerkung: Musterseite als einfaches Tabellenlayout - kann aber leicht in ein CSS-Layout geändert werden.

Hinweise:

Die Variante ist noch in der Test- und Ausbauphase, kann aber schon genutzt werden.
Es werden gelegentlich Änderungen/Erweiterungen im Code vorgenommen, dabei können sich Fehler einschleichen.

Bitte Fehler melden, damit ich sie beseitigen kann.

Hier die Codes

A) Menüerzeugung aus Textdatei menue.txt

<?php
$datendatei = "menue.txt";
//Markierung vor Link wenn Seite angezeigt wird
$markierung = '<img src="pfeil.gif">';
//Index-Datei in die includet wird
$index = "index.php";
//Startseite festlegen - Link nicht in Liste
$startseite = "<a href=\"$index\">Startseite</a><br>\n";
if (isset($_GET['site']))
{
echo "$startseite";
}else{
echo "$markierung$startseite";
}
$daten = file($datendatei);
while (list ($line_num, $linkdaten) = each ($daten))
{
$werte = explode("&&","$linkdaten");
if($werte[2]!=0)
{
if($_GET['site']==$werte[0])
{
echo "$markierung<a href=\"$index?site=$werte[0]\">$werte[1]</a><br>\n";
}else{
echo "<a href=\"$index?site=$werte[0]\">$werte[1]</a><br>\n";
}
}
}
?>

Die Einstellungen im Code
$datendatei = "menue.txt";
//Markierung vor Link wenn Seite angezeigt wird
$markierung = '<img src="pfeil.gif">';
//Index-Datei in die includet wird
$index = "index.php";
//Startseite festlegen - Link nicht in Liste
$startseite = "<a href=\"$index\">Startseite</a><br>\n";
bei Bedarf anpassen.


B) Inhaltsdateien einbinden

<?php
$startdatei2 = "includes/willkommen.html";
if (isset($_GET['site'])) 
{
$site = $_GET['site'];
$datendatei2 = "menue.txt";
$verzeichnis2 = "includes/";
$dateiendung2 =".html";
$fehlerdatei2 = "includes/fehler.html";
$found2 = 0; 
$daten2 = file($datendatei2); 
while (list ($line_num2, $linkdaten2) = each ($daten2))
{
$werte2 = explode("&&","$linkdaten2");
if($werte2[0]==$site){readfile($verzeichnis2.$werte2[0].$dateiendung2); $found2 = 1; break;}
}
if($found2==0){readfile($fehlerdatei2);}
}else{
readfile($startdatei2); 

?>

(17.3.2010 - Fehler im PHP-Code beseitigt, Zeile "$startdatei2..." nach oben verschoben)

Die Einstellungen im Code
$datendatei2 = "menue.txt";
$verzeichnis2 = "includes/";
$dateiendung2 =".html";
$startdatei2 = "includes/willkommen.html";
$fehlerdatei2 = "includes/fehler.html";
bei Bedarf anpassen.

Die Angabe bei $startdatei2 ist für den Fall, dass kein ?site=... im Link ist und $fehlerdatei2 wenn die Datei nicht gefunden wird.
Und wenn Dateien mit PHP-Code includet werden sollen, dann muss statt
readfile der Befehl require verwendet werden.


C) Menüpunkte in separater Datei festlegen


In der Datei menue.txt steht dann z.B. dieses

news&&News&&1&&
fotos1&&Fotos 1&&1&&
fotos2007&&Fotos Urlaub 2007&&0&&
uebermich&&Über mich&&1&&

jeweils pro Menüpunkt eine Zeile nach diesem Schema:

Linkdatei ohne Endung && Linkname && Zahl &&

Bei Zahl bedeutet 0 (null) keinen Menüpunkt anzeigen, z.B. wenn der Link innerhalb der Seite verwendet werden soll.
Die Zahl 1 (oder eine andere Zahl, solange sie nicht 0 ist) bedeutet, dass der Menüpunkt angezeigt wird.

Hinweis: Die Zahl soll später noch für andere Zwecke verwendet werden, vorerst dient sie nur zur Anzeige bzw. Nichtanzeige.

&& dient als Trennzeichen zwischen den Daten innerhalb der Zeile.


Anleitung (C) 2004 - 2010 Daniel Wurst - http://www.homepage-faqs.de