PHP-Datein strukturieren

  • Es gibt mehrere Möglichkeiten eine PHP-Datei zu strukturieren. (Für mehrere Unterseiten (mit dynamischem Inhalt))

    1.) Man erstellt einzelne Datein, in denen man den haeder und footer des Designs includet.
    2.) Man erstellt oben in der index.php ein Switch-Case. An der Stelle, wo der Content hin soll, wird dann die jeweilige Datei include (also das Gegenteil von 1)
    3.) Man erstellt eine Datei, in der man viele IF-Anweisungen einfügt. Zum Beispiel if $site = "kategorien" {echo "...

    Also mir gefällt Variante 2 am besten, nur wie mach ich das mit dem title, den metatags etc? Diese Daten erscheinen ja erst an der Stelle, wo die Datei included wird?

    Außerdem gibt es das Problem, dass in meiner includierten Datei keine Header und keine Cookies mehr gesendet werden können (header is already...)

    SWITCH-CASE

    TITLE / METATAGS

    DESIGN

    INCLUDING


    Oder gibt es noch andere Möglichkeiten, PHP-Dateien, mit mehreren Unterseiten zu strukturieren?

  • Grundsätzlich würde ich variante 2 benutzen. Grund für jede Variante gibt es genug, allerdings brauchst du wesentlich weniger Code für die gleichen Routinen, sprich 1mal eine Methode, die mit if / switch die entsprechenden Daten abfragt, als wenn du n-mal eine Methode wiederholst (auch ohne Abfragen wesentlich unsauberer -> du wirst bei einer kleinen Strukturveränderung in allen Seiten den selben Code ändern und anpassen müssen.
    Es gibt sicher noch mehr Argumente, aber das grade mal so aus der Hand geschrieben.

    Edit: verlesen.

    Sämtlicher Code erhebt keinen Anspruch auf syntaktische Korrektheit geschweige denn Ausführbarkeit und ist für die Implementation außerhalb der Beispiele nicht geeignet.
    [Blockierte Grafik: http://www.snippr.de/social/img/logo.png]
    Kein Support für kommerzielle Scripts | Kein kostenloser Support via ICQ

  • Ich erklär dir mal, wie ich es mache, ist ein wenig wie Variante 2 aber nicht mit switch:
    Ich habe eine Datei, in der ich mehre arrays definiere, nennen wir sie $site für die urls, $keys für die keywords, $title für die titel, $desc für die Beschreibung in den Metatags und $topic für den Metatag fürs Thema.
    Also die Datei sieht so aus:


    Die letzten vier Zeilen schauen dann, ob der Getparameter für die Seite gültig ist und setzen die ID ansonsten auf Start.
    Am Anfang deiner index.php includest du dann diese Datei.
    Die betreffenden Teile des Head sehen dann so aus:

    Code
    <meta name="description" content="<? echo $desc[$siteid]; ?>">
    <meta name="keywords" content="<? echo $keys[$siteid]; ?>">
    <meta name="page-topic" Content="<? echo $topic[$siteid]; ?>">
    <title>
    Meine Seite - <? echo $title[$siteid]; ?>
    </title>

    Und in dem div, in den der Content reinsoll:

    Code
    include($site[$siteid]);

    Das ist eigentlich sehr schön, zumindest wenn man keine Datenbank verwenden möchte.
    Bei mir habe ich das ganze mit mod_rewrite etwas aufgepeppt, sodass der Besucher nicht dieses ?siteid=irgendwas sieht, sondern eine schöne Url, die dahin umgeleitet wird.

    Viele liebe Grüße
    The User

  • Der klare Vorteil von Nr. 2 ist:
    Man hat das gesamte Design in einer Datei, die anderen Dateien müssen sich nur um den Inhalt kümmern, ihnen kann es relativ egal sein, wie das Layout aussieht.
    Außerdem kann man schnell Sachen wie Metatags hinzufügen, mit 1 müssten die einzelnen Seiten entweder ganz viele Seiten includen, um jeweils noch dazwischen die Metatags und den Titel zu bekommen, oder sogar Teile des Layouts übernehmen, und das wäre ja nicht schön.
    Den Header kannst du bei Nr. 2 einfach oben in die index.php schreiben, fertig.
    Möchtest du manchmal Unterseiten alleine testen und sie sind auf einen Header angewiesen (mir viele da nur session_start() ein), würde ich dir empfehlen, eine Datei session_start.php anzulegen, und diese schamlos bei allen Dateien, die sie benötigen sowie bei der Hauptdatei jeweils ganz oben mit include_once "session_start.php"; einzubinden.
    Dadurch gewährleistest du, dass der Header immer da ist, auch wenn du nur eine Teilseite hast.

    Viele liebe Grüße
    The User

  • includen geht aber nur, wenn der header nicht mehr gesendet wird. Weil wenn der Header nicht mehr gesendet wird, kommt ein Parseerror, welcher zur Folge hat, dass einige Variablen nicht mehr lesbar sind.

  • include_ONCE inkludiert nur EINMAL wie der name sagt

    lesen, denken, DANN posten

    Orthografie und Grammatik in diesem Beitrag sind frei erfunden und eine eventuell gefundene Übereinstimmung mit einer lebenden oder toten Sprache sollte von allen Beteiligten unverzüglich ignoriert werden.

    K-Progs (In bearbeitung)
    Der inoffizielle Forum-hilfe IRC-Channel
    (Server: irc.freenode.net ; Channel: #forum-hilfe) (Client für FF)
    Ich hab auch 'n Jabber-Account beim CCC ;)

  • oder man benutzt ein templatesystem in dem die ganze Seite vertig als HTML getippt ist und bestimmte Platzhalter nur ersetzt werden.

    Find diese 4. Möglichkeit am besten ;)

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • wenn du session_start() mehr als einmal includierst kriegst'n fehler darauf wollte er hinweisen.
    ich habe darauf hingewiesen, dasses nur einmal includiert wird

    Orthografie und Grammatik in diesem Beitrag sind frei erfunden und eine eventuell gefundene Übereinstimmung mit einer lebenden oder toten Sprache sollte von allen Beteiligten unverzüglich ignoriert werden.

    K-Progs (In bearbeitung)
    Der inoffizielle Forum-hilfe IRC-Channel
    (Server: irc.freenode.net ; Channel: #forum-hilfe) (Client für FF)
    Ich hab auch 'n Jabber-Account beim CCC ;)

  • Dodo
    Das wäre dann aber warscheinlich auch bald auf Datenbankbasis und so.
    Natürlich ist das noch besser, aber er möchte es erst einmal so machen.
    So lernt man doch auch viel besser, als wenn man von Anfang an sogar ein fertig-CMS oder so benutzt.

  • Vor allem in einem fertigem CMS als Anfänger zu tippen halte ich für äußerst fatal, man lötet ja auch nicht sofort an Mainboard rum, sondern bastelt sich erstmal ne kleine Platine selber.

    Sämtlicher Code erhebt keinen Anspruch auf syntaktische Korrektheit geschweige denn Ausführbarkeit und ist für die Implementation außerhalb der Beispiele nicht geeignet.
    [Blockierte Grafik: http://www.snippr.de/social/img/logo.png]
    Kein Support für kommerzielle Scripts | Kein kostenloser Support via ICQ

  • User:
    Wer redet denn da von vorgefertigten Datnbank-CMSen? ;)

    Selbst ein Templatesystem zu schreiben ist nicht schwer solang man mit file_get_contents und str_replace umgehen kann ;)

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Ein eigens CMS schreiben war mein erstes PHP-Projekt, wenn man mal von Kontaktformularen und Textbasierenden News-Scripten absieht xD So schwer ist das nicht, finde ich. Es dauert halt bisschen, aber irgendwann ist man so drin, da gehts wie von selbst.


    @t: Also ich würde sagen (persönliche Meinung):

    Für eine normale Webseite, die mehr oder weniger statisch ist, vllt mit paar flexiblen Inhalten nimmt man Variante 1.

    Wenn es schon eher in richtig dynamisches Portal bzw. CMS geht Variante 2 mit ausgelagerte Templatesystem, Programmierungsteil und Contentteil (in einer Datenbank). Jetzt noch nen Backend dazu und du hast dein CMS :)