Helmut: Website mit php statt FRames

Liebe Fachleute in EDV und Websites,

ich habe wieder mal eine Frage, die wahrscheinlich für Euch sehr simpel ist, mir aber Kopfschmerzen bereitet.

Ich habe mit einiger Mühe, das muss ich zugeben, eine Website mit Frames in xhtml -transitional bzw. -frameset ins Netz gestellt. Weil viele das für altmodisch halten, will ich nun versuchen, die Seite in xhtml strict umzuwandeln. Natürlich ist dann Schluss mit den Frames. Aber ich möchte das Design aufrecht erhalten mit einer links gelegenen Navigation, einer rechts oben gelegenen Titelzeile und einem rechts unten gelegenen großen Inhaltsfenster. Die Vorbereitungen dazu klappen auch eigentlich ganz gut.

Aber ich würde gerne die Navigationsleiste und die Titelzeile, die ja immer gleich sind, nicht in jede meiner Seiten einzeln einbauen, sondern sie als Teildateien auf meinem Server abrufen lassen. Außerdem brauche ich dann bei Änderungen der Navigation nur eine Teil-Datei zu ändern und nicht jede einzelne Seite.

Soweit ich verstanden habe, wäre "php" eine Möglichkeit, das zu verwirklichen, wenn der Server diese Möglichkeit anbietet. Ich habe im php-Handbuch geblättert und nichts gefunden bzw. nichts verstanden. Vielleicht steht es ja auch gar nicht darin??

Wie kann ich mit php eine Teil-Datei aufrufen und einbinden, also welche Befehle sind dazu nötig?
Geht das nur im body-Teil oder auch im head-Teil der html-Datei?
Wie muss die php-Datei, die man einbindet, aussehen (nur die Bestandteile, die man einbindet? Sonstige Informationen? Endung ".php?!"

Ich würde mich sehr über entsprechende Informationen freuen und bedanke mich schon mal.

Helmut

  1. Aber ich würde gerne die Navigationsleiste und die Titelzeile, die ja immer gleich sind, nicht in jede meiner Seiten einzeln einbauen, sondern sie als Teildateien auf meinem Server abrufen lassen.

    Das lohnt nicht. Der Protokollüberhang, der nötig ist, um den Browser drei statt einer HTML-Datei abzurufen, dürfte rein rechnersich merklich sein. Außerdem müsste das per Javascript/DOM/Ajax vollbracht werden, was noch "schlimmer" wäre als die Frames, die du jetzt benutzt.

    Außerdem brauche ich dann bei Änderungen der Navigation nur eine Teil-Datei zu ändern und nicht jede einzelne Seite.

    Das ist der einzige (und vollkommen richtige) Grund, solche Seitenteile zentral an einer Stelle zu lagern.

    Soweit ich verstanden habe, wäre "php" eine Möglichkeit, das zu verwirklichen, wenn der Server diese Möglichkeit anbietet.

    PHP ist eine Möglichkeit, serverseitig eine HTML-Seite aus mehreren Teilen zusammenzusetzen. Du brauchst dazu lediglich an der gewünschten Stelle

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

    in die Datei A einzufügen, um den Inhalt der Datei B dort erscheinen zu lassen. B.html ist dabei der gewünschte Dateiname.

    Geht das nur im body-Teil oder auch im head-Teil der html-Datei?

    PHP kümmert sich nicht um HTML, eine .php-Datei ist ein Programm, das zwar meist aussieht wie eine HTML-Datei, aber keine ist. Du kannst kreuz und quer PHP-Blöcke (<?php [Anweisungen] ?>) einstreuen, am Anfang, am Ende, mitten in einem HTML-Befehl, wie du lustig bist.

    Endung ".php?!"

    Soll der Server eine Datei als PHP-Datei erkennen, wird sie in aller Regel mit der Endung .php versehen, richtig.

    PHP ist eine ziemlich vollständige Programmiersprache. Eine einfachere und deshalb für dich vielleicht überschaubarere Alternative sind Server-Side Includes (SSI). Im Apache sind sie mittels mod_include realisiert und in aller Regel selbst auf Servern vorhanden, auf denen es kein PHP gibt.

    Mit SSI bindet man Dateien üblicherweise so ein:

    <!--#include virtual="B.html" -->

    Der wesentliche Unterschied ist hier nur, dass B.html in diesem Fall eine URL ist, kein Dateiname. Du gibst hier also einen (lokalen) URL-Pfad ein, so, wie du ihn in der Browser-Adressleiste eingeben würdest.

    Die übliche Endung für SSI-Dateien ist .shtml.

    Auch bei SSI ist es egal, wo die Anweisung erscheint. Auch wenn das jetzt für den Einstieg etwas zu hoch sein mag: <meta>-robots setze ich in meinen Seiten in etwa so:

    <meta name="robots" content="<!--#echo var="robots" -->">

    Tatsächlich steht da noch eine if-Abfrage drum herum, aber worauf es mir hier ankommt, ist zu zeigen, das SSI- und auch PHP-Anweisungen überall erscheinen können, so wie in diesem Fall mitten in einem HTML-Attribut die Variable robots ausgegeben wird.
    SSI ist trotz seines geringen Umfangs recht flexibel, ich bastel' damit sogar eine Krümelnavi in Form einer <ul>-Liste zusammen. In Navigationsmenüs lässt sich ohne allzu große Umstände die aktive Seite hervorheben. Es muss also nicht unbedingt immer PHP sein.

    Noch ein Tipp:
    Richtest du alle deine Seiten-URLs als Verzeichnisse ein, also /kontakt/ statt zum Beispiel /kontakt.php, kannst du auch später noch zu anderen Techniken wechseln, ohne, dass die URLs sich wegen der Dateiendung ändern.

    1. Hallo,

      Sorry, aber ist wirklich ganz richtig so?

      PHP ist eine Möglichkeit, serverseitig eine HTML-Seite aus mehreren Teilen zusammenzusetzen. Du brauchst dazu lediglich an der gewünschten Stelle

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

      in die Datei A einzufügen, um den Inhalt der Datei B dort erscheinen zu lassen. B.html ist dabei der gewünschte Dateiname.

      Trifft das nicht auf <?php require ("B.html"); ?> zu, dass der Inhalt an der selben Stelle ausgegeben wird? <? include (**.html); steht doch eher am Anfang der PHP-Datei und ist eher dafür gedacht zur gesamten Laufzeit des Scriptes Variablen oder Funktionen zur Verfügung zu stellen, oder nicht?

      Gruss,
      Kai

      1. Hi,

        Trifft das nicht auf <?php require ("B.html"); ?> zu, dass der Inhalt an der selben Stelle ausgegeben wird? <? include (**.html); steht doch eher am Anfang der PHP-Datei und ist eher dafür gedacht zur gesamten Laufzeit des Scriptes Variablen oder Funktionen zur Verfügung zu stellen, oder nicht?

        Nein. Zitat: "Diese beiden Konstrukte sind in jeder Hinsicht gleichwertig mit der einen Ausnahme: der Umgang mit Fehlern. include() erzeugt ein Warning während require() in einem  Fatal Error endet."

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
      2. n'Abend,

        Sorry, aber ist wirklich ganz richtig so?

        ja.

        Du brauchst dazu lediglich an der gewünschten Stelle
        <?php include("B.html"); ?>
        in die Datei A einzufügen, um den Inhalt der Datei B dort erscheinen zu lassen. B.html ist dabei der gewünschte Dateiname.

        Trifft das nicht auf <?php require ("B.html"); ?> zu, dass der Inhalt an der selben Stelle ausgegeben wird?

        Ja, auch.

        Der Unterschied zwischen include und require ist lediglich, dass require stärker ist - wird eine mit require eingebundene Datei nicht gefunden, bricht PHP das gesamte Script ab; bei include wird es einfach ohne die fehlende Datei weiter ausgeführt (was evtl. zu Folgefehlern führen kann).

        <? include (**.html); steht doch eher am Anfang der PHP-Datei und ist eher dafür gedacht zur gesamten Laufzeit des Scriptes Variablen oder Funktionen zur Verfügung zu stellen, oder nicht?

        Das ist ein häufiger Anwendungsfall. Aber wie jemand include oder require nutzt, bleibt jedem selbst überlassen. Der eine bindet zu Beginn des Scripts eine umfangreiche Bibliothek von Hilfsfunktionen ein, der andere lädt mittendrin verschiedene Seitenteile nach. Beides ist technisch in Ordnung; was besserer Stil ist, darüber kann man streiten.

        Wenn wir schon über verschiedene Methoden der Einbindung sprechen, sollten wir readfile() nicht vergessen - damit wird der Inhalt einer Datei direkt an den Client durchgereicht, ohne dass PHP den Inhalt überhaupt genauer anschaut (besonders geeignet für binäre Dateien, etwa Bilder).

        So long,
         Martin

        --
        Man gewöhnt sich an allem, sogar am Dativ.
        1. Wenn wir schon über verschiedene Methoden der Einbindung sprechen, sollten wir readfile() nicht vergessen - damit wird der Inhalt einer Datei direkt an den Client durchgereicht, ohne dass PHP den Inhalt überhaupt genauer anschaut

          Ich wollte den OP nicht verwirren, aber da hier nun schon x PHP-Möglichkeiten angeführt wurden, möchte ich noch meine Lieblingsfunktion anführen: virtual().

          Macht exakt das Gleiche wie <!--#include virtual="" -->, d.h. fügt eine (lokale) URL in die Ausgabe ein. Überaus praktisch, da die einzufügende URL so behandelt wird, wie es webserverseitig vorgesehen ist, so lassen sich zum Beispiel auch SSI-Dateien in PHP-Skripte einbinden.

    2. Hi,

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

      in die Datei A einzufügen, um den Inhalt der Datei B dort erscheinen zu lassen. B.html ist dabei der gewünschte Dateiname.

      include() & Co. sind für HTML-Dateien nicht angebracht. Sinnvoller sind file_get_contents() & echo (falls der HTML-Code noch bearbeitet werden soll) bzw. noch sinnvoller: readfile() (falls der Code nur durchgereicht, oder eh mit Output-Buffering gearbeitet wird).

      Du kannst kreuz und quer PHP-Blöcke (<?php [Anweisungen] ?>) einstreuen, am Anfang, am Ende, mitten in einem HTML-Befehl, wie du lustig bist.

      Was man mit Rücksicht auf Spaghetticode trotzdem vermeiden sollte.

      Noch ein Tipp:
      Richtest du alle deine Seiten-URLs als Verzeichnisse ein, also /kontakt/ statt zum Beispiel /kontakt.php, kannst du auch später noch zu anderen Techniken wechseln, ohne, dass die URLs sich wegen der Dateiendung ändern.

      Da ist wohl eher Apaches MultiViews angesagt. =:-o

      Ggf. läßt man es auch einfach bei .html, und läßt (alle oder einzelne, Stichwort XBitHack) Dateien trotzdem mit PHP parsen.

      Gruß, Cybaer

      --
      Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
      (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
  2. Hi,

    Weil viele das für altmodisch halten, will ich nun versuchen, die Seite in xhtml strict umzuwandeln.

    ist das ein Grund? Wichtig ist imho vor allem eine sinnvolle Html-Strukturierung und ja, der Verzicht auf Frames.

    Aber ich würde gerne die Navigationsleiste und die Titelzeile, die ja immer gleich sind, nicht in jede meiner Seiten einzeln einbauen, sondern sie als Teildateien auf meinem Server abrufen lassen.

    alles andere macht keinen Sinn weil zu pflegeintensiv und Fehleranfällig.

    Soweit ich verstanden habe, wäre "php" eine Möglichkeit, das zu verwirklichen, wenn der Server diese Möglichkeit anbietet.

    SSI oder eine Serverseitige Scriptsprache Deiner Wahl...

    Ich habe im php-Handbuch geblättert und nichts gefunden bzw. nichts verstanden. Vielleicht steht es ja auch gar nicht darin?
    readfile(),
    include(),
    require(), um nur einige Methoden zu nennen.

    Wie muss die php-Datei, die man einbindet, aussehen (nur die Bestandteile, die man einbindet? Sonstige Informationen? Endung ".php?!"

    Du bist ein Fall für die Doku ;-)

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
  3. hallo,

    Ich habe mit einiger Mühe, das muss ich zugeben, eine Website mit Frames in xhtml -transitional bzw. -frameset ins Netz gestellt. Weil viele das für altmodisch halten, will ich nun versuchen, die Seite in xhtml strict umzuwandeln.

    Frames sind in keiner Weise altmodisch. Es kann durchaus Stellen geben, an denen ihr Einsatz weiterhin sinnvoll erscheint - aber wenn du "strict" nehmen willst (was durchaus empfehlenswert ist) gilt: "Natürlich ist dann Schluss mit den Frames".

    Aber ich möchte das Design aufrecht erhalten mit einer links gelegenen Navigation, einer rechts oben gelegenen Titelzeile und einem rechts unten gelegenen großen Inhaltsfenster.

    Wenn du das so haben möchtest, läßt sich das in der HTML-Ausgabe auch mit CSS realisieren.

    Soweit ich verstanden habe, wäre "php" eine Möglichkeit, das zu verwirklichen, wenn der Server diese Möglichkeit anbietet. Ich habe im php-Handbuch geblättert und nichts gefunden bzw. nichts verstanden. Vielleicht steht es ja auch gar nicht darin?

    Doch, da steht alles drin, was du wissen möchtest. Engelchen hat dir bereits einiges zu dem gesagt, was PHP ist; allerdings halte ich nicht alle seine Aussagen für zwingend.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
  4. Hi,

    Weil viele das für altmodisch halten, will ich nun versuchen, die Seite in xhtml strict umzuwandeln.

    Iiih, wie altmodisch. Mittlerweile ist bereits HTML 5 angesagt! :)

    Geht das nur im body-Teil oder auch im head-Teil der html-Datei?

    Wichtig ist nur, was hinten dabei rauskommt. Und das sollte HTML sein. ;)

    Gruß, Cybaer

    --
    Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
    (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)