Andi D.: Bewertung: Standard-Seitenstruktur einer kleinen Webpräsenz

Guten Morgen,
nachdem ich nun mehrere Webseiten immer nach demselben Schema aufgebaut habe, wollte ich mal eure Meinung dazu hören. Bzw mich erkundigen, wie ihr das so macht. :-)

Wir reden von kleinen bis mittleren Webpräsenzen mit 3-6 Hauptmenüpunkten und je bis zu 10 Unterseiten. Zum Einsatz kommt dabei natürlich PHP.

**************
Ordnerstruktur
**************
So in etwa sieht mein fertiger Dateibaum aus:

/css/
/de/
 /unternehmen/
   index.php
   geschichte.php
   offenestellen.php
 /leistungen/
   index.php
   produktionen.php
   zertifikate.php
 /kontakt/
   index.php
   anfahrt.php
   impressum.php
/en/
  [analog zu /de/ mit engl. Bezeichnungen]
/images/
/includes/
  basic.inc.php
  data.inc.php
  main_navi.inc.php
  content.de.index.php
  content.de.leistungen.php
  ...
  content.en.index.php
  content.en.leistungen.php
  ...
/js/
index.php

******************
Inhalte der Dateien
******************

So, öffnet man z.B. die Datei /de/unternehmen/geschichte.php steht da nix an Content drin, sondern lediglich $page="geschichte" und ein paar includes. Das Ganze beschränkt sich also auf 4.5 Zeilen. Das gilt für alle Dateien unter /de/ und /en/.

Die basic.inc.php ist das Grundgerüst der Seite. Hier steht der Header (ggf. wird der auch ausgelagert) und das HTML-Gerüst. an den entspr. Stellen wird die Navi und der Content includet.

In data.inc.php stehen die Menü und ggf. Untermenüpunkte drin, sodass sich das Menü dynamisch aufbauen kann. Und es werden alle Pfad-Angaben definiert.

main_navi.php baut anhand dieser Daten das Menü (und ggf. Untermenü) zusammen.

Der eigentliche Content der Seiten steht dann in den ganzen content.xx.yyyy Dateien. Jeder Hauptmenüpunkt hat eine eigene Datei. Dort wird dann ggf. noch mittles if($subpage="foo") elseif($subpage="bar") etc der Content der einzelnen Unterseiten abgezeigt.

Eigentl. bin ich mit diesem System ganz gut gefahren. Aber man kann natürlich immer noch optimieren. Wie seht ihr das? Wie geht ihr dabei vor?

Vielen Dank für alle Hinweise.
Gruß,
Andi

  1. Moin allerseits,

    [...]
       anfahrt.php
       impressum.php
    /en/
      [analog zu /de/ mit engl. Bezeichnungen]
    /images/
    /includes/
      basic.inc.php
      data.inc.php
      main_navi.inc.php
      content.de.index.php
      content.de.leistungen.php
      ...
      content.en.index.php
      content.en.leistungen.php
      ...
    /js/
    index.php

    Ich würde wahrscheinlich ein Verzeichnis content anlegen und alle content-Dateien dorthin einschleusen. Die Dateinamen werden kürzer. Außerdem würde ich auch wahrscheinlich die Dateien als z.B. .inc und nicht als .php includieren. Dadurch hast du mehr Möglichkeiten (z.B. Verwendung von Funktionen).

    So, öffnet man z.B. die Datei /de/unternehmen/geschichte.php steht da nix an Content drin, sondern lediglich $page="geschichte" und ein paar includes. Das Ganze beschränkt sich also auf 4.5 Zeilen. Das gilt für alle Dateien unter /de/ und /en/.

    Dann bietet es sich meiner Meinung nach an, unter /de/ eine Umleitung mit mod_rewrite an zu legen. Für einen unerfahrenen Benutzer wird das natürlich nicht so durchsichtig, wie deine Struktur. Aber was nützt dir diese Vielzahl an Dateien? Man könnte sonst nämlich noch zwanzig mal so viele Dateien anlegen. datei1.php includiert datei2.php includiert ... datei15.php ..
    Es würde ja sogar ausreichen, wenn du unter /de/ eine de.php anlegst, die einfach per Variablen den entsprechenden Content einbindet. Dann legst du die Menüpunkte nicht mit Verzeichnissen an, sondern mit GET-Variablen. Sonst, wie gesagt, mod_rewrite

    Grüße, JN

    --
    ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
    http://www.johny7.de
    1. Hallo,

      content.de.index.php
        content.de.leistungen.php
        ...
        content.en.index.php
        content.en.leistungen.php
      Ich würde wahrscheinlich ein Verzeichnis content anlegen und alle content-Dateien dorthin einschleusen. Die Dateinamen werden kürzer.

      ACK.

      Außerdem würde ich auch wahrscheinlich die Dateien als z.B. .inc und nicht als .php includieren. Dadurch hast du mehr Möglichkeiten (z.B. Verwendung von Funktionen).

      Inwiefern macht der Name (die Namensendung) deiner Ansicht nach einen Unterschied, wenn man diese Dateien mit include einbindet? - Abgesehen davon stimme ich dir zu; ich würde Dateien, die keine selbständig abrufbare Ressource darstellen, auch nicht mit ".php" benamsen, der Untercheidung wegen. Technische Gründe wüsste ich dafür nicht.

      Es würde ja sogar ausreichen, wenn du unter /de/ eine de.php anlegst, die einfach per Variablen den entsprechenden Content einbindet. Dann legst du die Menüpunkte nicht mit Verzeichnissen an, sondern mit GET-Variablen.

      Das wäre raffiniert. Elegant wird es zusätzlich, wenn man das Script nicht /de.php, sondern nur /de nennt, und ihm die Informationen nicht als URL-Parameter übergibt, sondern mit $_SERVER['PATH_INFO'] abfragt.

      Ciao,
       Martin

      --
      Ein Ehepaar beim Sex. Sie fragt ihn: "Woran denkst du gerade?" - Er antwortet: "Kennste sowieso nicht."
      1. Außerdem würde ich auch wahrscheinlich die Dateien als z.B. .inc und nicht als .php includieren. Dadurch hast du mehr Möglichkeiten (z.B. Verwendung von Funktionen).

        Inwiefern macht der Name (die Namensendung) deiner Ansicht nach einen Unterschied, wenn man diese Dateien mit include einbindet? - Abgesehen davon stimme ich dir zu; ich würde Dateien, die keine selbständig abrufbare Ressource darstellen, auch nicht mit ".php" benamsen, der Untercheidung wegen. Technische Gründe wüsste ich dafür nicht.

        So macht es keinen Unterschied. Sollten diese includes aber eines Tages per http://example.org aufgerufen werden, wird nicht der Quelltext eingebunden sondern die geparste Ausgabe. Das Problem hatte ich schon einmal, als ich Dateien von einem zentralen Server includieren wollte.

        Das wäre raffiniert. Elegant wird es zusätzlich, wenn man das Script nicht /de.php, sondern nur /de nennt, und ihm die Informationen nicht als URL-Parameter übergibt, sondern mit $_SERVER['PATH_INFO'] abfragt.

        Und wenn ich dann /de/unternehmen/info aufrufe, wird trotzdem das Script /de aufgerufen und der Pfad abgearbeitet? Das ist ja nicht schlecht. Gibt es keine 404-Ausgabe? Wird der Rest des Strings einfach drangehängt? Dann braucht man ja nicht mal mod_rewrite. Was passiert aber, wenn /de/unternehmen/info aufgerufen wird und es existiert gleichzeitig das entsprechende Unterverzeichnis?

        Grüße, JN

        --
        ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
        http://www.johny7.de
        1. Hi,

          Inwiefern macht der Name (die Namensendung) deiner Ansicht nach einen Unterschied, wenn man diese Dateien mit include einbindet? [...]
          So macht es keinen Unterschied. Sollten diese includes aber eines Tages per http://example.org aufgerufen werden, wird nicht der Quelltext eingebunden sondern die geparste Ausgabe. Das Problem hatte ich schon einmal, als ich Dateien von einem zentralen Server includieren wollte.

          PHP-Quellcode von einem anderen Server zu includieren, ist aber "bad practise".

          Elegant wird es zusätzlich, wenn man das Script nicht /de.php, sondern nur /de nennt, und ihm die Informationen nicht als URL-Parameter übergibt, sondern mit $_SERVER['PATH_INFO'] abfragt.
          Und wenn ich dann /de/unternehmen/info aufrufe, wird trotzdem das Script /de aufgerufen und der Pfad abgearbeitet?

          Ja, wenn es entsprechend konfiguriert ist. Man muss dem Apachen klarmachen, dass /de oder /en ein Script ist, das er bitte an den PHP-Interpreter zu reichen hat:

          [.htaccess]

          <Files ~ "^(de|en)$">  
          ForceType application/x-httpd-php  
          </Files>
          

          Das ist ja nicht schlecht. Gibt es keine 404-Ausgabe?

          Nein.

          Dann braucht man ja nicht mal mod_rewrite. Was passiert aber, wenn /de/unternehmen/info aufgerufen wird und es existiert gleichzeitig das entsprechende Unterverzeichnis?

          Das kann nicht passieren. Wenn im Filesystem etwas existiert, das /de heißt, kann es nicht gleichzeitig ein PHP-Script und ein Verzeichnis sein. Ergo kann auch /de/subdir nicht physisch existieren. Man täuscht quasi den gesamten Verzeichnisbaum nur vor.

          So long,
           Martin

          --
          Der Stress von heute ist die gute alte Zeit von morgen.
  2. Hi!

    zuerst wuerd mich mal interessieren, was passiert, wenn man z.B. example.com/unternehmen/offenestellen.php im Browser aufruft. Kommt dann auch die Seite? Wie sehen deine URLs aus? wird obiges angezeigt, wenn ich mir gerade die Seite anschaue? Oder ist deine Ordner- und Filestruktur nur fuer das Bearbeiten so angelegt?

    --
    "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
          - T. Pratchett
    1. Hallo Steel

      zuerst wuerd mich mal interessieren, was passiert, wenn man z.B. example.com/unternehmen/offenestellen.php im Browser aufruft. Kommt dann auch die Seite?

      Nein, da fehlt das /de/. War das ein Tippfehler oder wolltest du genau darauf hinaus?

      Wie sehen deine URLs aus?

      www.example.com/index.php
      www.example.com/de/unternehmen/index.php
      www.example.com/de/unternehmen/offenestellen.php
      www.example.com/de/kontakt/anfahrt.php
      ...
      www.example.com/en/company/jobs.php
      ...

      So sind sie verlinkt und genau so kann man sie auch direkt aufrufen.

      Gruß
      Andi

      1. Hallo Steel

        zuerst wuerd mich mal interessieren, was passiert, wenn man z.B. example.com/unternehmen/offenestellen.php im Browser aufruft. Kommt dann auch die Seite?

        Nein, da fehlt das /de/. War das ein Tippfehler oder wolltest du genau darauf hinaus?

        Noe. So pingelig bin ich heut nicht.

        Wie sehen deine URLs aus?

        www.example.com/index.php
        www.example.com/de/unternehmen/index.php
        www.example.com/de/unternehmen/offenestellen.php
        www.example.com/de/kontakt/anfahrt.php
        ...
        www.example.com/en/company/jobs.php
        ...

        So sind sie verlinkt und genau so kann man sie auch direkt aufrufen.

        Das ist gut. Ich mag das CMS Website Baker, weil es auch so eine Struktur erstellt. Ich finde, man muss nicht alles mit Parametern und modrewrites machen. (ich wuerde hier aber schon ueber die Verwendung einer DB und ein CMS nachdenken.)

        Ueber ein paar andere Dinge, wie Dateiendungen (inc/php) oder die Art Contentdaten zu speichern, haben sich ja schon andere Gedanken gemacht. Vielleicht kannst Du da etwas fuer dich rausfischen. Vor allem, weil Du ja vielelicht auch mal groesser Projekte mit Inhalten aus einer DB realisieren musst/moechtest. Da ist eine schon allgemein zentral gehaltene Datenspeicherung evtl. von Vorteil.

        Solltest Du deine Includes mit der Endung .inc versehen bedenke aber dass sie dann besser nicht aus dem Web erreichbar sein sollten. Es spricht nichts gegen php als Dateieindung oder eben einem inc.php.

        Nichts ist unschoener, als sensible Daten in einer .inc, die nicht geparst wird, zum Download anzubieten.

        --
        "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
              - T. Pratchett
  3. Hallo,

    nachdem ich nun mehrere Webseiten immer nach demselben Schema aufgebaut habe, wollte ich mal eure Meinung dazu hören. Bzw mich erkundigen, wie ihr das so macht. :-)

    Ich würde - wie schon an anderer Stelle erwähnt - die URL-Struktur über mod_rewrite abbilden und alle Anfragen auf eine index.php umleiten. Und ganz eindeutig nur online stellen, was unbedingt muss, also die includierten PHP-Dateien nicht.

    /online/
    /offline/

    Die Domain delegierst Du dann auf "online". In "online" steht dann nur eine einzige PHP-Datei, nämlich "index.php", zusätzlich alle Bilder, CSS, JS, etc:

    /css/
    /pics/
    /js/
    /index.php

    Deine Scripte, wo dann auch die einzelnen Seiteninhalte drin stehen legst Du in den "offline"-Ordner, damit von außen nicht darauf zugegriffen werden kann:

    /inc/       [Seitenaufbau, Menü, Tools]
    /pages/     [einzelne Seiteninhalte: leistungen.zertifikate.de.inc.php

    Bei einem kleinen Projekt fängst Du jetzt in der index.php die gültigen URL-Aufrufe ab und erzeugst die entsprechende Seite - am besten als Objekt, dem Du dann Eigenschaften wie Seiteninhalt, Titel, Metaangaben, etc. zuweist.

    Gruß,
    luti