Wenn ihr eure Website noch traditionell mit HTML & CSS erstellt anstatt ein CMS zu verwenden, kennt ihr sicher das Problem. Bei einer Änderung, die für alle Seiten gilt, müsst ihr diese auch alle einzeln ändern. Bei einigen wenigen Seiten mag das noch machbar sein, spätestens bei 10 oder mehr Seiten artet das aber in echte Arbeit aus. Ein Editor wie z. B. Notepad++, der dateiübergreifendes Suchen und Ersetzen unterstützt, reduziert diesen Aufwand zwar bereits erheblich. Noch eleganter ist aber die Auslagerung des Codes mit anschließender Einbindung durch die php-Funktion include().
include() für die Navigation verwenden
Mit include() könnt ihr eine Datei importieren, deren Code genauso ausgeführt wird wie wenn er direkt auf der Seite eingebunden wäre. Ein klassisches Beispiel für einen Code, der in allen Seiten zur Verfügung stehen soll, ist die Haupt-Navigation. In der Regel soll diese überall gleich angezeigt werden und auch Änderungen sollen in allen Dateien gleichzeitig vorgenommen werden.
Um dies zu erreichen, lagert ihr die komplette Navigation zuerst in einer Datei aus:
Datei navigation.html
<ul>
<li><a href="http://www.example.com">Home</a></li>
<li><a href="http://www.example.com/tolleseite.php">Tolle Seite</a></li>
<li><a href="http://www.example.com/urlaub/bilder.php"></a>Urlaubsbilder</li>
<li><a href="http://www.example.com/impressum.php"></a>Impressum</li>
</ul>
Wichtig hierbei ist, dass ihr die Adressen absolut adressiert, also mit Angabe der Domain. Sonst kann es vorkommen, dass die Seiten nicht gefunden werden und ein Error 404 angezeigt wird.
In den Seiten, in denen ihr die Navigation einbauen wollt, braucht ihr dann nur noch die include-Funktion aufzurufen:
Datei tolleseite.php
<?php include ("navigation.html"); ?>
Änderungen braucht ihr ab sofort nur noch in der navigation.html vorzunehmen, damit sie auf allen Seiten erscheinen.
Wichtig sind dabei 2 Dinge:
1. Euer Webspace muss PHP unterstützen (ist inzwischen der Normalfall).
2. Die Dateien, in denen die include-Funktion eingebunden sind, müssen die Endung .php haben. Ausnahme: Durch folgenden Eintrag in der .htaccess könnt ihr auch andere Endungen wie z. B. .html verwenden:
AddHandler application/x-httpd-php .html
Header mit include() einbinden
Auch der Header, also der Bereich von <head> bis </head>, beinhaltet viele Aufrufe, die in allen euren Dateien gleich sind (z. B. DOCTYPE). Allerdings gibt es auch Angaben wie den Seitentitel, die Seitenbeschreibung und den robots-Tag, die ihr individuell gestalten solltet. Deshalb solltet ihr den Header nur teilweise auslagern:
Datei myheader.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" xml:lang="de" lang="de">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="shortcut icon" href="favicon.ico" />
In eurer Seite stehen dann nur noch der include-Aufruf und die individuellen Auszeichnungen.
Datei tolleseite.php
<?php include ("my-header.html"); ?>
<title>Titel meiner Seite</title>
<meta name="description" content="Beschreibung meiner Seite" />
<meta name="robots" content="index,follow" />
</head>
Weitere Anwendungen für include()
Neben der Auslagerung der Navigation und des Headers könnt ihr include() auch noch für folgende Zwecke verwenden:
- Einbau einer Headergrafik
- Einbau eines Suchfeldes
- Einbau von Werbung
- Einbau eines Footers
Je öfters ihr die include()-Funktion in euren Seiten einsetzt, desto weniger Pflegeaufwand habt ihr in Zukunft.
include() oder readfile()?
Auch mit der readfile()-Funktion könnt ihr ausgelagerte Dateien in eure Seiten einbinden. Der Vorteil ist, dass diese Funktion wesentlich schneller ausgeführt wird und weniger Speicher als include() verbraucht (Quelle: Raditha.com).
Allerdings hat readfile() den Nachteil, dass nur reine Texte importiert werden können. In der Auslagerungsdatei enthaltene php-Befehle werden nicht ausgeführt. Da es durchaus vorkommen kann, dass auch reine Textdateien irgendwann mal um php-Befehle erweitert werden sollen, habe ich mir angewöhnt, auf readfile() zu verzichten und verwende ausschließlich die include()-Funktion.
include() auf euren Seiten
Verwendet ihr auch die include()-Funktion auf euren Seiten? Falls ja, welchen Code bindet ihr damit ein? Schreibt doch bitte in den Kommentaren etwas dazu.
Hi du,
include ist ja ganz nett, besser ist es aber mit require( ) umzusetzen, da man hier sofort sieht, wenn irgendwas nicht verfügbar ist. Damit habe ich meine Seite aufgebaut und es läuft super. Zusätzlich sehe ich sofort, wenn ich vergessen habe, eine Datei auf den Server zu laden, denn dann meckert meine Webseite darüber 😉
Gruß,
Sven
Ja, mit include habe ich auch noch zu meinen Anfangszeiten gearbeitet. Vorsicht ist allerdings geboten, wenn man mit Variablen im Include arbeitet. Vielleicht ergänzt du das ganze hier nochmal mit einem Artikel. Dürfte sicherlich hilfreich sein.
Viele Grüße,
Michael
@Sven Das ist nicht ganz richtig. Auch include() zeigt nicht verfügbare Dateien an. Dies allerdings als Warnung, so dass das Skript nachher fortgesetzt werden kann. Der Vorteil von include() ist, dass dadurch eventuell noch weitere Fehler angezeigt werden können, während require() nach dem ersten Fehler abbricht. Wen das nicht stört kann aber natürlich auch require() anstatt include() verwenden.
@Michael Karl
**** mit Variablen im Include arbeitet ***
Wo ist da das Problem?
Wennman mehrere Orte (Dateien) hat, welche die selbe $Variable nutzen, und sich dadurch gegenseitig überschreiben?
***meine index.php****
$DCkill_ = $_SERVER[‚HTTP_HOST‘] . $_SERVER[‚REQUEST_URI‘];
include(‚cms800/cms800ini.php‘);
include(‚cms800/cms800.php‘);
header(„HTTP/1.1 200 OK“);
include(„cms800/cms800request.php“);
include(‚cms800/cms800filer.php‘);
if ( $DCkill && strcmp($DCkill,$DCkill_) )
{ make301($DCkill); exit();
} echo( $tbuf );
*******************************************
in „request.php“ wird die URL zerteilt
in „filer.php“ werden
1. SELECT * FROM Domain
2. SELECT * FROM Path
3. SELECT * FROM File
Die Inhalte aus der DB ausgelesen
Alle Domains in einem Webspace, werden über die selbe index.php abgewickelt
in der „Path“ DB ist das Template angeben, welches nach $tbuf geladen wird
dann werden Platzhalter via str_replace gegen ihre Inlahte ausgetauscht
und am Ende geht alles über einen „Echo“ raus
ausser es wurde festgestellt das die requestete URL nicht so ist wie sie sein soll, dann einen Redirekt auf die richtige URL
@Cujo
**Wichtig hierbei ist,**
„JA“ zu **Adressen absolut adressiert***
„NEIN“ zu **also mit Angabe der Domain**
Wichtig ist, das die URLs mit dem „/“ beginnen
das ist „Absolut“ und genügt absolut
und bei Eurem Weg kann sich nochd as Problem ergeben
wenn in einer „geincludeten“ Datei ein Weiterer include ist
z.B.
domain.tld/Album/Andy/view.php
domain.tld/Album/Andy/Atari/view.php
es gibt in der „view“ einen include auf „../Anzeige.php“
abgelebt unter
domain.tld/Album/Anzeige.php
das funktioniert
„Ja“ @ /Album/Andy/view.php
„Nein“ @ /Album/Andy/Atari/view.php
innerhalb von PHP ist wichtig „welches war die erste Datei“
früher fürte das bei mir schonmal zu Problemen
nun ist es immer die /index.php
Mein Homepage ist mit WordPress umgesetzt, aber auf fotografr.de arbeite ich mit include.
Dort werden Header, Navigation und Footer damit eingebunden.
Eine weitere gute Möglichkeit, zum Beispiel die Navigation oder den Header bei einer größeren Anzahl von Dateien einer ganzen Site zu ändern ist das Programm „Advanced Find and Replace“. Das setze ich auch ein.
Modularität ist eigentlich meistens einer fixen Struktur vorzuziehen, aber natürlich muss man dann auch auf einige Dinge achten.
Besonders vorteilhaft ist, dass die einzelnen Seitendokumente deutlich schlanker werden und man im Falle eines Problemes sich durch weniger Code wälzen muss.
Ich nutze auf meiner Seite ebenfalls den include()-Befehl.
1. Für die allgemeinen Angaben im Header
2. Für die Kopfzeile
3. Für das Menue
4. Für den Footer
So ist es ehr übersichtlich und, wie Du schon schreibst, sehr Änderungsfreundlich.
Ich nutze ebenfalls include… Leider ist mir noch nicht ersichtlich geworden, ob dies auch SEO komform ist. Kann mir evtl. jemand sagen, ob die Suchmaschinen den ausgelagerten Bereich ebenfalls mit der Seite in Verbindung bringen in der er eingebunden ist? Oder kann es passieren, dass ein User von goolge auf der Seite landet in der die Inhalte mit include ausgelagert sind?
Ansonsten echt schöner Thread…
Viele Grüße
Carsten
@Carsten Da die Dateien ja durch deinen Webserver eingebunden werden bekommt ein Nutzer, sowie auch Google nichts davon mit. Der „include()-Teil“ wird ja durch den Inhalt der eingebetteten Datei ersetzt.