Seite 1 von 2

Mit include einbinden in verschiedenen Ebenen

Verfasst: 17.05.2010 12:22
von Huchinotte
Hi ....

bin grad dabei eine Webseite zu basteln. Dazu verwende ich bei den Hauptseiten die alle im Root liegen, den include Befehl um den Header und das menue zu includieren, was auch so weit funktioniert

Code: Alles auswählen

<!-- header-->
<?php include ("header.php");?> 
<!-- ende header-->

<!-- menue-->
<?php include ("menue.inc.php");?> 
<!-- ende menue-->
Nun habe ich aber noch im Root einen Unterorder der jeweil nochmals einen Ordner enthällt ... in diesem habe ich dann noch weitere Seiten sprich ungefähr so
Root --> Bilder --> Party - party.php
Nun möchte ich in der party.php natürlich auch das menue und den header includieren, aber das funktioniert nur wenn ich den direkten Pfad in die Include Anweisung angebe. Aber das ist ja nicht Sinn der Sache. Wie muss der Include Befehl aussehen damit ich auch darüber gelegene Dateien includieren kann?

Gruß Huch

Re: Mit include einbinden in verschiedenen Ebenen

Verfasst: 17.05.2010 13:06
von Frank1604
Hallo,

du musst den Pfad dann relativ angeben. also so ungefähr:

Code: Alles auswählen

    <!-- header-->
    <?php include ("../header.php");?>
    <!-- ende header-->

    <!-- menue-->
    <?php include ("../menue.inc.php");?>
    <!-- ende menue-->

Re: Mit include einbinden in verschiedenen Ebenen

Verfasst: 17.05.2010 13:14
von Huchinotte
Hi ......

ja das mit dem relativen Pfad habe ich auch schon versucht. Wenn ich das ganze Lokal teste mit xaamp dann bekomme ich folgende Fehlermeldung wenn ich auf die Seiten im Unterordner zugreife

Code: Alles auswählen

Warning: include(../header.php) [function.include]: failed to open stream: No such file or directory in C:\xampp\htdocs\web-server\hp_pfiff\bilder\party\party_1.php  on line 2

Warning: include() [function.include]: Failed opening '../header.php' for inclusion (include_path='.;C:\xampp\php\pear\') in C:\xampp\htdocs\web-server\hp_pfiff\bilder\party\party_1.php on line 2

Warning: include(../menue.inc.php) [function.include]: failed to open stream: No such file or directory in C:\xampp\htdocs\web-server\hp_pfiff\bilder\party\party_1.php on line 5

Warning: include() [function.include]: Failed opening '../menue.inc.php' for inclusion (include_path='.;C:\xampp\php\pear\') in C:\xampp\htdocs\web-server\hp_pfiff\bilder\party\party_1.php on line 5
Bin jetzt nicht die Leuchte in Sachen php aber was bedeutet (include_path='.;C:\xampp\php\pear\')

Gruß Huch

Re: Mit include einbinden in verschiedenen Ebenen

Verfasst: 17.05.2010 14:50
von P7BB
Es sagt dir, dass der Pfad ungültig ist. Also Um das mit relativen Pfaden (Pfäden?) zu erleutern:
../ bedeutet, dass du ein verzeichnis zurückgehst. Nach dem / kommt dann die Pfadangabe. Du könntest auch 2 Verzeichnisse zurückgehen: ../../
./ bedeutet, dass es sich um das selbe Verzeichnis handelt. "./index.php" ist also das gleiche, wie "index.php". Du kannst es auch mit dem vorherigem Verzeichnis kombinieren: ./../ oder .././ wobei beides den gleichen effekt hat, wie ../

wenn also jetzt die header.php und die menu.inc.php in dem root-verzeichnis liegen, muss der pfad von der party.php folgender sein: ../../header.php und ../../menu.inc.php
So einfach ist das schon ;)

Re: Mit include einbinden in verschiedenen Ebenen

Verfasst: 17.05.2010 15:04
von Huchinotte
Hi .........P7BB,

danke für die Erklärung. Die Fehlermeldungen habe ich nun weg und auch die Seite wird mir angezeigt, aber nicht so als wenn ich auf die Hauptseiten zugreife. Der Punkt ist das die ganzen formatierungen aus der css nicht genommen werden.
Wenn ich auf den Seiten im Rootverzeichnis bin funktioniert alles so weit. Gehe ich dann auf die php Seite wo im Unterordner liegt wird die css wohl nicht geladen.
Genauso verhält es sich mit dem Menue das ich include. Auf den Hauptseiten heissen die Links

Code: Alles auswählen

http://localhost/web-server/hp_pfiff/galerie.php
auf der Unterseite "http://localhost/web-server/hp_pfiff/bi ... arty_1.php" wird daraus

Code: Alles auswählen

http://localhost/web-server/hp_pfiff/bilder/party/galerie.php
Die CSS lade ich in der header.php und das menue natürlich in der menue_inc.php. Also wird zwar die header.php included aber die css nicht dabei geladen. Und die menue_inc.php wird auch included aber die Links werden irgendwie umgewandelt.
Den include Befehl habe ich abgeändert wie du es beschrieben hast

Code: Alles auswählen

<!-- header-->
<?php include ("../../header.php");?>
<!-- ende header-->
<!-- menue-->
<?php include ("../../menue.inc.php");?>
<!-- ende menue-->
Es sieht so aus das er auf den Unterseiten alle zu ladenden Funktionen wie die css und die Menuelinks nun mit den Pfad belegt wo sich die Unterseiten befinden. Hm schwer zu erklären aber als Beispiel die css. diese liegt im Root also unter

Code: Alles auswählen

http://localhost/web-server/hp_pfiff/format.css
und diese wird auf der Unterseite nun so aufgerufen

Code: Alles auswählen

http://localhost/web-server/hp_pfiff/bilder/party/format.css
Und wenn ich das richtig verstehe scheint mir das auch klar denn die css wird ja im header aufgerufen

Code: Alles auswählen

<link rel="stylesheet" href="format.css" type="text/css" />
und da ich diese jetzt include wird der Pfad von dem unterordner jetzt mit integriert aber dort liegt diese nicht. Ich denke ich muss noch irgendwie die drectory mit angeben? Bin mir aber nicht sicher!


Gruß Huch

Re: Mit include einbinden in verschiedenen Ebenen

Verfasst: 17.05.2010 17:02
von P7BB
Ja, das Problem ist eigentlich kein Problem, sondern eine logische Folge aus deinem Vorhaben ;)
Die Datei liegt im bilder/party/-Ordner, das heißt, dass alle relativen Pfade auch von dieser Datei ausgehen. So führen relative Menülinks zu einer Datei, die relativ vom bilder/party/-Ordner ausgeht.
Das Problem kannst du so beseitigen: Definiere in jeder PHP-Datei sowas wie $root_dir mit dem wert "./" oder auch "../../",...
Diese Variable wird nun in allen Dateien benutzt, um auf den root-Ordner zurückzuverweisen und anschließend werden alle Pfade vom root-Ordner aus verlinkt.
Beispiel:

party.php

Code: Alles auswählen

<?php
$root_dir = "../../"; // root verzeichnis liegt 2 Verzeichnise unter dem der party.php

...

?>
header.php

Code: Alles auswählen

...
<link rel="stylesheet" href="<?php echo $root_dir; ?>/format.css" type="text/css" />
...
Die Variable $root_dir hat eben nun immer den Teilpfad so angepasst, dass er zum root-Ordner hinführt.
Sollte jetzt die format.css aber beispielsweise in einem ordner "template" liegen, so würde der pfad so aussehen müssen:

Code: Alles auswählen

...
<link rel="stylesheet" href="<?php echo $root_dir; ?>/template/format.css" type="text/css" />
...
Sofern $root_dir nicht gesetzt ist, steht dort einfach nur das hier:

Code: Alles auswählen

...
<link rel="stylesheet" href="/format.css" type="text/css" />
...
"/format.css" ist gleichzusetzen mit "./format.css"

Edit: 333 Beiträge *g*

Re: Mit include einbinden in verschiedenen Ebenen

Verfasst: 17.05.2010 18:07
von Huchinotte
Hi .............

super das klappt ja schon einmal sehr gut. Also alle Seiten funktionieren jetzt und auch die Links vom Menue gehen jetzt auf der Unterseite. Folgendes habe ich jetzt gemacht

party.php

Code: Alles auswählen

<!-- header-->
<?php $root_dir = "../../";
include ("../../header.php");?>
<!-- ende header-->
<!-- menue-->
<?php $root_dir = "../../";
include ("../../menue.inc.php");?>
<!-- ende menue-->
header.php (teilauszug aus den relevanten Funktionen)

Code: Alles auswählen

<script type="text/javascript" src="<?php echo $root_dir; ?>/highslide/highslide-with-gallery.js"></script>
<link rel="stylesheet" href="<?php echo $root_dir; ?>/highslide/highslide.css" type="text/css"/>
<link rel="stylesheet" href="<?php echo $root_dir; ?>/format.css" type="text/css" />

<script type="text/javascript">
hs.graphicsDir = '<?php echo $root_dir; ?>/highslide/graphics/';
menue.inc.php (mal einen Links als Beispiel)

Code: Alles auswählen

<a href="<?php echo $root_dir; ?>/index.php"  onfocus="this.blur()">&nbsp;&nbsp;Home</a></td>
So weit so gut. Nur habe ich jetzt noch einen Schönheitsfehler. Wenn ich local per xaamp auf die Seite zugreife und mich im Root bewege werden die Links so dargestellt

Code: Alles auswählen

http://localhost/food.php
so gehe ich nun richtung der party.php ins Unterverzeichnis passt das auch noch. Nur wenn ich jetzt von der Unterseite wieder zurück gehe z.B. auf die oben genannte food.php dann wird plötzlich

Code: Alles auswählen

http://localhost//food.php
draus. Sprich der Backslash hat sich vermehrt. Und wenn ich dann auf der mit dem doppelten Backslash wieder zurück auf die Unterseite und wieder zurück auf die food.php sinds auf einmal 3 Backslashes, es wird dann immer ein dazu addiert.
Ich denke hab wohl in der Unterseite (party.php) doch noch einen Fehler drinn beim includen.

Edit: hm jo Fehler gefunden im Link muss der backslash raus vor dem filenamen

Gruß Huch

Re: Mit include einbinden in verschiedenen Ebenen

Verfasst: 17.05.2010 18:26
von P7BB
Huchinotte hat geschrieben:Edit: hm jo Fehler gefunden im Link muss der backslash raus vor dem filenamen
Oh, dann ist der Slash doch nicht gleichzusetzten mit ./ :o

Aber ok, wieder was gelernt :D

Re: Mit include einbinden in verschiedenen Ebenen

Verfasst: 02.03.2014 11:32
von Ossiost
Hallo,
ich weiß eure Beiträge zu diesem Thema sind schon etwas her, aber ich habe es über die Suchfunktion gefunden und denke mein Problem ist recht ähnlich, aber ich verstehe die Lösung noch nicht ganz, vielleicht könnt ihr mir da helfen.

Also zu meiner Situation. Ich bin dabei die Seite von unserem Sportverein zu aktualisieren. Da war schon länger keiner mehr dran und deshalb ist die noch auf iFrame Basis aufgebaut. Also das Menü und der Header sind in einem iFrame und die Inhalte werden dann immer in ein weiteres geladen. Da das ja nicht mehr wirklich zeitgemäß ist würde ich gerne auf php "umstellen".
Die Seite hat allerdings schon eine ganz ordentliche Größe und ist deshalb zur Übersichtlichkeit in mehrere Ordner und Unterordner aufgeteilt.
z.B.: rootdir/Aktuelles/Berichte/2014/Bericht1.html
Die Anzahl der Unterordner variiert aber denn es gibt auch mal Übersichtsseiten, wo dann eine Liste mit allen Berichten aus einem Jahr ist...

Jetzt meine Idee:
Ich habe ein Tutorial über die Include Funktion in php gesehen in dem der Autor sein Menü ausgelagert hat mit der Begründung, dass er es dann nicht auf allen Unterseiten bearbeiten muss, wenn er es mal verändern will, sondern nur eine Datei verändert und dann wird ja überalle die veränderte Menü datei included. Ich hab mir gedacht perfekt das brauche ich, auch wenn das ne Menge Copy and Paste Arbeit heißt, weil ich ja dann auf allen Unterseiten die include Funktion unterbringen muss, aber es danach ja dann leicht habe.

So jetzt das Problem:
Wie kriege ich es hin, dass die Pfade in meinem Menü auf allen Unterseiten stimmen? Weil ich habe gemerkt, dass meine menu.html datei ja eins zu eins an die stelle geladen wird, wo ich die include Funktion benutzt habe. Aber wenn ich mich jetzt in unterschiedlichen Ebenen befinde, dann ändern sich ja auch die relativen Pfade. Gibt es vielleicht eine Möglichkeit, dass ich alle Seiten von der menu.html Datei aus verlinke und das dann jeweils angepasst wird für die Unterseiten?

Falls ihr genau das hier schon erklärt habt, dann verzeiht mir bitte und erklärt es nochmal für einen totalen php Neuling.

Schon mal danke für die HIlfe :)

Re: Mit include einbinden in verschiedenen Ebenen

Verfasst: 03.03.2014 08:58
von D@ve
Natürlich könntest Du jetzt automatisch die Ordner scannt und Dir daraus ein Menü bastellt, aber gnaz ehrlich... Das hier...
Die Seite hat allerdings schon eine ganz ordentliche Größe und ist deshalb zur Übersichtlichkeit in mehrere Ordner und Unterordner aufgeteilt.
z.B.: rootdir/Aktuelles/Berichte/2014/Bericht1.html
...sieht mir stark danach aus, dass Du Dir ein CMS installieren solltest (Drupal, oder Joomla etc). Das wird zwar mal einmal richtig Arbeit, die Artikel einzupflegen. Aber imo tust Du Dir keinen Gefallen damit, HTML-Seiten von Hand zu pflegen.

Gruß, Dave