Von Frames zu PHP-include

Hallo zusammen!

Ich habe mich heute neu bei bplaced registriert – unter anderem, um zu lernen. Ich habe jahrelang Homepages mit Frames erstellt – wenn auch immer etwas schlechten Gewissen.s :wink: . Nun möchte ich lernen, wie man Frames mit Hilfe von PHP, das ja auch mein bplaced-Webspace beherrscht, umschifft.

Ich habe mich online bereits über include & Co schlau gemacht und einmal ein paar erste Gehversuche unternommen. Dieses Posting soll vor allem der Absicherung dienen, ob ich es wirklich verstanden habe, und ich wäre dankbar, wenn ihr mir dabei helfen könntet. :wink:

Meine Seite sieht aus wie folgt (vgl. Anhang): Vier div-Container in einem div-Wrapper; oben und unten ein Header/Footer, links das Menü, rechts der Content. Außer dem Content wird alles per php-include aus externen Dateien eingebunden (header.php, footer.php, menu.php):

[code]

::: NSC-Bibliothek :::
<?php include $_SERVER["DOCUMENT_ROOT"] . "/header.php"; ?>
<?php include $_SERVER["DOCUMENT_ROOT"] . "/menu.php"; ?>
<div class="centered">
<h1>Willkommen in der NSC-Bibliothek!</h1>
[...]
</div>
<?php include $_SERVER["DOCUMENT_ROOT"] . "/footer.php"; ?>
[/code]

Meine Frage wäre nun: Macht das überhaupt Sinn so? Der Witz eines PHP-includes sollte ja sein, im Falle von Änderungen an der Seite nur eine einzige Datei ändern zu müssen (wie schon bei meinen alten Freunden, den Frames :stuck_out_tongue: ). Das ist bei meinem aktuellen Entwurf jedoch nur eingeschränkt gegeben. Was zum Beispiel ist, wenn ich eines Tages noch etwas am Layout der Seite ändern möchte? Wenn ich z.B. unterhalb des Headers noch einen „Header2“ einfügen möchte? Den müsste ich – nach dem aktuellen Entwurf – dann doch in jede einzelne php-Datei meiner Seite einbauen. Habe ich da irgendwo einen Denkfehler drin, oder ist das durchaus im Sinne von php? :wink:

Beste Grüße,
Stalker2k60.

Ps: Wer sich das Ganze lieber “in Farbe und bunt” ansehen möchte:
nsc-bibliothek.bplaced.net/

Hi,

am besten machst du es so (würd ich sagen)

header.php

[code]

... ....
bla bla
<? include("./menue.php"); ?>
[/code]

footer.php

[code]

bla bla
[/code]

und dann für jede seite:

[code]<?php include("./header.inc.php"); ?>

HIER KOMMT DANN DER CONTENT HIN UND ZWAR NUR CONTENT

<?php include("./footer.php"); ?>[/code]

lg flo

Hallo, Ryon_!

Herzlichen Dank erstmal für die blitzschnelle Antwort! :slight_smile:

Wenn ich deinen Code richtig lese, dann hast du darin v.a. drei Dinge gemacht:
[ul][li] die div-Tags in die einzelnen PHP-Dateien ausgelagert[/li]
[li]Die obligatorische HTML-Syntax (, , + deren schließende Tags) in die Header- und Footer-PHPs ausgelagert[/li]
[li]Header und Menü in einer PHP-Datei zusammengelegt[/li][/ul]
Ersteres finde ich sehr sinnvoll, herzlichen Dank für die Idee!
Zweiteres kann man sicher machen, werde ich mir aber wahrscheinlich verkneifen. Grund: Ich überlege, später eine Offline-Version der Seite zusammenzustellen, bei der die PHP-includes durch Javascript-includes ersetzt werden; das benötigt jedoch eine intakte HTML-Syntax, um zu laufen, und die Traffic-Ersparnisse durch den include scheinen mir jetzt auch nicht soo groß zu sein.
Bei Dritterem bin ich mir noch unschlüssig. Im Kern ist er gut, nur wenn man eines Tages keinen Header mehr im Layout haben möchte, ist man mit dieser Aufteilung aufgeschmissen. Was wäre mit folgender Weiterentwicklung:

header.php

menu.php

vor_dem_content.php

include header.php inkl. divs include menu.php inkl. divs start-div des contents

nach_dem_content.php

end-div des contents code des footers inkl. divs [beliebig ergänzbar um weitere PHP-Dateien, die nach dem Content kommen sollen]

und dann für jede (content-)Seite:

include vor_dem_content.php HIER KOMMT DER CONTENT HIN include nach_dem_content.php

So könnte man später beliebig Komponenten aufnehmen oder rausschmeißen. Falls man z.B. keinen Header mehr möchte, könnte man einfach den include-Befehl für die header.php aus der vor_dem_content.php löschen. Falls man keinen Footer mehr möchte, könnte man die footer.php löschen und die nach_dem_content.php einfach leer lassen.
Macht das irgendwie Sinn? :wink:

Hallo, Sinn macht es, den Header, das Menü und den Footer gleich in ganzer Ausschreibung in der “index.html” zu belassen. Denn wenn eine Seite mal vollendet ist, ändert sich an diesen Stellen wohl kaum noch etwas. Anders sieht es wiederum beim Inhalt der Seite aus, den lagert man logischerweise extern aus.

<html>
<head>

<!-- Der gesammte Headereintrag -->

</head>
<body> 

<!-- Der gesammte Haupteintrag (Headergrafik => oben, Menü => links) -->

<div id="content">
<? include('./content.php'); ?>
</div>

</body>
</html>

So baut man zeitgemäss und strukturiert eine einfache Seite, wie sie Deine ist, auf. :wink:

Hi,

ich würde das wie oben schon geschrieben mit 2-3 Datein machen.

Eine header und footer und wenn das menu sehr groß ist dann noch eine menu die aber direkt durch den header eingebunden wird. Wenn du so viele datein machst wirds ggf. nur unübersichtlich.

Schau dir mal z.b. die Seite an imagesandmore.net/ dort gibt es eine header und eine footer datei. In der Headerdatei wird einmal die menü leiste eingebunden und dann eben das content div geöffnet. Im Footer wird das Conent div geschlossen und das sidebar div geöffnet. Danach kommt der ganze Statische Code von der Sidebar und das was öftersmal geändert wird (oder zu groß ist und dann alles unübersichlich macht) includiert. Danach das Sidebar div geschlossen und der untere Link bereich mit einem div geöffnet und die erste spalte angefangen dann wieder ein include für die erste spalte und dann erste spalte geschlossen und zweite geöffnet … bis es dann bei der dritten ist die geschlossen wird dann wird das link bereichsdiv geschlossen und noch dieses Copyright eingeblendet und dann body und html geschlosssen.

Und wenn du wie gesagt mal möchtest das man z.b. auf einer seite keinen header div hat dann kannst du es so lösen z.b.

header.php

[quote]

.... [b]<?php $_headerphp['headerdiv'] = !empty($_headerphp['headerdiv']) ? $_headerphp['headerdiv'] : ''; if($_headerphp['headerdiv'] != 'nein') { ?> [/b]
hier ist der sog. header mit z.b. bild
[b]<?php } ?> [/b]
[/quote]

und dann in deiner datei einfach:

[quote]<?php
$_headerphp[‘headerdiv’] = “nein”;
include("./header.php");
?>

bla bla bla

<?php include("footer.php"); ?>[/quote]

lg flo

Eine Offline-Version der Seite würde ich nicht durch Javaskript-Includes herstellen.
Dazu besser die Online-Seite per HTTrack oder ähnlichem spiegeln und dabei eine reine HTML-Version erstellen :wink:

Bei meiner Photogalerie, wo man bei den einzelnen Ausstellungsbereichen zwischen einigen
CSS+SVG- und CSS+XHTML-Varianten wählen kann, habe ich das so gemacht, daß in der
aufrufenden Datei alle veränderlichen Dinge in Variablen (die Bilder und Kommentare dazu in
arrays) notiert werden.
Per include wird dann eine Datei eingebunden, welche die Ausgabe steuert.
Die guckt auch, ob die gewünschte Ausgabe etwa für antike browser oder Suchmaschinen
einen Sinn ergibt und sich dann eben für eine Variante entscheidet, die entweder
gewünscht oder wenigstens anzeigbar ist.
Nachdem so entschieden ist, welche Ausgabe realisiert wird, werden andere Dateien
eingebettet, welche die komplette Ausgabe zusammenbasteln, dazu auch noch aus anderen
Dateien immer gleiche Inhalte mit den individuellen Inhalten in den Variablen zu einer Ausgabe
zusammenfügen.

Das hat auch den Vorteil, daß man tausende von Inhaltsdateien, eine jeweils für einen
Ausstellungsbereich, bearbeiten kann, ohne sich um die Ausgabe kümmern zu müssen.
Will man andererseits die Ausgabe ändern oder eine weitere Variante ergänzen, reicht es fast
immer, nur die Dateien zu modifizieren, die für die eigentliche Ausgabe zuständig sind.
So ist es also auch relativ einfach, zwei komplett unterschiedliche Formate wie SVG und XHTML
als Ausgabe mit den gleichen Inhaltsdaten anzubieten.

Für eine lokale Variante verwendet man einfach einen web-server auf dem eigenen Rechner,
der das PHP interpretiert.
Will man den Kram wirklich per CD oder Archiv anderen Leuten überlassen, so ist es besser,
bei den Skripten eine Variante vorzusehen, vermutlich auch noch mit einem gesonderten Skript,
mit deren Hilfe aus dem ganzen Kram eine statische Ausgabe erzeugt wird. Wegen der
größeren Stabilität solcher statischer Varianten ist das auch eine Möglichkeit, für den normalen
Betrieb eine Version ohne PHP zu generieren, wenn man keine interaktiv veränderlichen Inhalte hat.

@Stalker2k60
also mich würde mal als erstes interessieren warum du eigentlich irgendwann mal eine offline-version erstellen möchtest - insbesondere ob die dann nur für dich sein soll oder ob du die aus welchen grund auch immer an andere weitergeben möchtest…

und zwar aus folgenden grund:

zitat:
Für eine lokale Variante verwendet man einfach einen web-server auf dem eigenen Rechner,
der das PHP interpretiert.

hier stellt sich für mich die frage ob dann jeder so ohne weiteres bereit/in der lage ist einen solchen web-server auf sein rechner zu installieren?!?!

Eben deswegen will er später die php-includes duch js-includes ersetzen.

Wobei es wirklich sinnvoller wäre, das ganze wie progandy beschrieben hat zu machen.