HTML Menü mit php include einbinden und relative Pfade nutzen
ebody
- html
- php
0 Gunnar Bittersmann0 Rolf B
0 Rolf B
Hallo,
ich binde eine HTML Datei mit einem Menü in verschiedene HTML Seiten mit <?php include(); ?>
ein. Die Seiten befinden sich in unterschiedlichen Ordnern und Ebenen.
Die Menü Datei befindet sich im Ordner /include/
Die menu.html Seite greift auf Bilder und CSS Dateien im Ordner /menu/ zu
In die index.php Seiten wird die Datei /include/menu.html eingebunden:
Egal in welcher Seite und Ebene die menu.html eingebunden wird, die Pfade innerhalb der Datei müssen immer auf den Ordner /menu/ zugreifen.
Da ich die Seite über localhost, einer lokalen IP und der Domain selbst teste, möchte ich gerne relative Pfade innerhalb der menu.html verwenden.
Ich habe (glaube ich) jede Variante mit...
...ausprobiert, aber ich konnte bisher keinen relativen Pfad finden, der in jeder Ebene funktionieren würde.
Ist das in diesem Fall überhaupt möglich oder müsste ich absolute Pfade verwenden oder mit PHP z.B. die Pfade innerhalb der menu.html (dann menu.php) anpassen?
Gruß ebody
@@ebody
Ich habe (glaube ich) jede Variante mit...
- ../de/menu/img/file.svg
- ./de/menu/img/file.svg
- /de/menu/img/file.svg
- de/menu/img/file.svg
...ausprobiert
Du hast (glaube ich) /de/menu/img/file.svg
doch nicht ausprobiert?
🖖 Stay hard! Stay hungry! Stay alive! Stay home!
Hallo Gunnar,
Du hast (glaube ich) /de/menu/img/file.svg doch nicht ausprobiert?
kommt drauf an, wie seine Server aussehen. Wenn's sowas wie das hier ist:
http://example.org/foo/bar/demopage.php
http://localhost:8084/bar/demopage.php
http://10.2.3.4/test/bastel/bar/demopage.php
dann kommt man mit einem server-absoluten Pfad nicht hin.
Natürlich kann man sich seine Test-Server passend konfigurieren, dass der Path-Teil der URL immer gleich ist. Aber wenn ebody diese Möglichkeit hätte, würde er wohl nicht fragen. Glaube ich 😉
Rolf
Hallo ebody,
da die menu.html aus Sicht des Browsers gar nicht existiert, sondern als Teil von (beispielsweise) /index.php, /foo/data.php und /bar/baz/info.php ausgeliefert wird, hast Du keine Chance, das allein in menu.html zu lösen.
Ich hatte das Problem in einer mit Klassen organisierten PHP Anwendung auch. Da gab es im Wesentlichen eine Einstiegsseite, die auf www.example.org/foo/test.php zu finden war, und wenn ich lokal getestet habe, war es localhost:8080/test.php.
Meine beiden Lösungen sehen so aus:
Das kann man konfigurationsfrei lösen. Du brauchst dafür folgende Informationen:
Eine Lösung mit Konfigurationsdatei ist, das Web-Root in einer include-Datei abzulegen, die nicht mit deployed wird. Um diese include-Datei finden zu können, müssen die includenden PHPs aber auch wissen, wo sie sich im Web-Baum befinden. Oder Du verwendet den include_path.
<?php
$ServerSetup = ARRAY('WWW-Root' => '/test1'):
Diese Datei kann menu.php includen, oder Du includest die Datei in allen Einstiegsscripten und verwendest $ServerSetup (oder wie auch immer Du sie nennen magst) als globale Variable. Bei Bedarf setzt Du dann $ServerSetup['WWW-Root']
als Präfix für alle Ressourcen-URLs.
Rolf