Lars: Wie organisiert ihr die Dateien eurer Website?

Hey ihr,

schon seit geraumer Zeit mache ich mir Gedanken, wie man eigentlich sinnvoll eine Website strukturiert bzw. unterteilt. Natürlich gibt es da kein Allheilrezept, aber sicher ein paar hilfreiche Grundlagen...?

Ich habe das bisher so gehandhabt:

  • Alle Bilder, PDF-Dokumente (AGBs, Bedingungen, Infoblätter, ...) usw. in den Unterordner /resources

  • Alle html bzw. php Dateien in den übergeordneten Ordner, in dem sich auch die index-Datei befindet.

  • PHP-Scripts, die ausschließlich zum Einfügen in andere Scripts gedacht sind (SQL-Verbindung, Datumsausgaben, ...) kamen in den Unterordner /include.

  • Falls vorhanden gab es dann noch die Unterordner /admin oder /login.

  • In letzter Zeit habe ich öfter mit mehreren Designs gearbeitet und deshalb die CSS-Dateien in den Unterordner /css gepackt.

Irgendwie aber etwas schwachsinnig teilweise (das mit dem include-Ordner). Zufällig habe ich grade in einem Teil der SelfHTML-Dokumentation gesehen, dass in einem Beispiel nach /navigation und /editorial unterschieden wurde.

Wie handhabt ihr das so? Tipps?

Grüße
Lars

  1. Mahlzeit,

    • PHP-Scripts, die ausschließlich zum Einfügen in andere Scripts gedacht sind (SQL-Verbindung, Datumsausgaben, ...) kamen in den Unterordner /include.

    Alles, was nicht direkt vom Webserver ausgeliefert werden soll/darf, hat unterhalb des DOCUMENT_ROOT nix zu suchen. So sehe ich das jedenfalls. :-) Deswegen liegen Include-Dateien, Bibliotheken usw. alle in einem /include-Verzeichnix parallel zum /htdocs (evtl. mit Unterordnern).

    Wie handhabt ihr das so? Tipps?

    Ansonsten mach ich's mal so und mal so - hab die für mich ideale Lösung noch nicht gefunden. Mal nach Inhalt getrennt, mal nach Funktion ...

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo EKKi,

      Alles, was nicht direkt vom Webserver ausgeliefert werden soll/darf, hat unterhalb des DOCUMENT_ROOT nix zu suchen. So sehe ich das jedenfalls. :-) Deswegen liegen Include-Dateien, Bibliotheken usw. alle in einem /include-Verzeichnix parallel zum /htdocs (evtl. mit Unterordnern).

      Sicherheitstechnisch durchaus verständlich, leider nicht immer möglich, vor allem, wenn man Code schreibt, der auch auf unterschiedlich(st)en Systemen funktionieren soll.

      Jonathan

      1. Hallo Jonathan,

        Sicherheitstechnisch durchaus verständlich, leider nicht immer möglich, vor allem, wenn man Code schreibt, der auch auf unterschiedlich(st)en Systemen funktionieren soll.

        Doch, eigentlich schon. Es ist eigentlich lediglich ein Probleme, wenn man keinen Zugriff auf Bereiche außerhalb des Document-Root hat. Den Pfad zu den entsprechenden Verzeichnissen lässt sich ja variabel programmieren, entweder als Konstante innerhalb des Scripts selber oder in einer von allen anderen Scripten inkludierten Datei; noch eleganter finde ich aber, dies über Umgebungsvariablen zu regeln.

        Schöne Grüße,

        Johannes

        1. Hallo Johannes,

          leider nicht immer möglich, vor allem, wenn man Code schreibt, der auch auf unterschiedlich(st)en Systemen funktionieren soll.

          Es ist eigentlich lediglich ein Probleme, wenn man keinen Zugriff auf Bereiche außerhalb des Document-Root hat.

          Eben. Und das man das kann ist ja bei gratis und günstigen Anbietern von Webspace eher die Ausnahme.

          ich habe nichts dagegen wenn der Includes-Pfad konfigurierbar ist, aber man sollte nicht damit rechnen bzw. erwarten, dass er außerhalb des docrootes angelegt werden kann. Ein normaler Ordner mit einem .htacces drin, der säämtlichen zugriff sperrt sollte eigentlich für den Anfang reichen. Supergeheime passwörter würde ich dann natürlich nicht darin ablegen und dass man die Endung nicht auf PHP lassen sollte bzw. (was ich teilweise noch besser finde, da man so beim Versagen der .htaccess den Quellcode nicht unbedingt sieht) am Anfang der PHP-Dateien prüft ob diese ordnungsgemäß inkludiert sind sollte auch selbstverständlich sein

          Jonathan

          1. Hallo Jonathan,

            ich habe nichts dagegen wenn der Includes-Pfad konfigurierbar ist, aber man sollte nicht damit rechnen bzw. erwarten, dass er außerhalb des docrootes angelegt werden kann. Ein normaler Ordner mit einem .htacces drin, der säämtlichen zugriff sperrt sollte eigentlich für den Anfang reichen.

            Das ist die Alternative für Angebote, wo keine Möglichkeit besteht, Dateien außerhalb des Webroots abzulegen. Letzteres sollte aber, wenn möglich, bevorzugt werden.

            Supergeheime passwörter würde ich dann natürlich nicht darin ablegen und dass man die Endung nicht auf PHP lassen sollte bzw. (was ich teilweise noch besser finde, da man so beim Versagen der .htaccess den Quellcode nicht unbedingt sieht) am Anfang der PHP-Dateien prüft ob diese ordnungsgemäß inkludiert sind sollte auch selbstverständlich sein

            Du meintest sicher "auf PHP lassen"? Denn genau dann wird ja der Quellcode nicht angezeigt, wenn der Server den Dateityp nicht erkennt, wird er sich in den meisten Konfigurationen im Klartext ausliefern.

            Schöne Grüße,

            Johannes

            1. Hallo zusammen,

              ich hoffe, meine Anfängerfrage passt hierzu.
              Es liest sich, als ob ihr immer mal wieder die Verzeichnisstruktur ändert. Darum gehe ich davon aus, dass es eine Möglichkeit gibt, die Referenzen innerhalb der HTML-Dokumente automatisch anzupassen. Denn von Hand dort durchmaschieren und alles ändern ist zumindest bei einer umfangreichen Website doch sehr zeitraubend und fehleranfällig.

              Also, meine Frage lautet: Gibt es so etwas? Falls ja, wie funktioniert es?
              Die Suche hat mich leider nicht weitergebracht, aber das lag vielleicht auch an den Stichworten.

              Merci d'avance,
              Klappi

              1. Hallo

                Es liest sich, als ob ihr immer mal wieder die Verzeichnisstruktur ändert. Darum gehe ich davon aus, dass es eine Möglichkeit gibt, die Referenzen innerhalb der HTML-Dokumente automatisch anzupassen. Denn von Hand dort durchmaschieren und alles ändern ist zumindest bei einer umfangreichen Website doch sehr zeitraubend und fehleranfällig.

                ein paar Ideen:

                1. gibt es Editoren, die sowas für einen erledigen.
                   a) Editoren, die eine Website-Verwaltung integriert haben, Beispiele wären
                      Dreamweaver oder Frontpage bzw. dessen Nachfolger.
                   b) Editoren, die verzeichnisübergreifendes oder projektspezifisches Suchen
                      und Ersetzen beherrschen, Beispiele wären UltraEdit oder auch vim.

                2. gibt es Skripte, die sowas für einen erledigen.
                   a) Ein kleines Perlskript, das vermutlich weniger als 20 Zeilen hat
                      Hier empfiehlt sich eine Forumssuche mit author:seth
                   b) Ein kleines Skript in einer beliebigen anderen Programmier- oder
                      Skriptsprache, das vielleicht dann 30 Zeilen hat.
                   c) Ein cooles Shellskript, das eventuell als Einzeiler daherkommt.

                3. werden umfangreiche Webpräsenzen dynamisch generiert. Hier sollte eine
                   Pfadanpassung in _einer_ Konfigurationsdatei ausreichen. Das ist weder
                   zeitraubend noch fehleranfällig.

                Freundliche Grüße

                Vinzenz

                1. Hellihello Vinzenz,

                  c) Ein cooles Shellskript, das eventuell als Einzeiler daherkommt.

                    
                  #!/bin/bash  
                  echo "und jetzt? - nur eine Zeile? Mit ganz vielen Pipes?"  
                  
                  

                  Dank und Gruß,

                  frankx

  2. Hallo Lars,

    ich mache das meist auch vom Umfang des Projektes abhängig. Wenn enorm viele Bilder verwendet werden, arbeite ich manchmal auch mit mehreren Images-Ordnern (images, images_layout, .....) oder ich lege Unterordner an. Z.B. images/buttons. Innerhalb der Ordner arbeite ich noch mit entsprechenden Benennungen, so heißen alle Hintergrundgrafiken back_navi.jpg back_body.jpg etc. Alle Schaltflächen but_home.jpg, but_contact.jpg usw usw. Das erleichtert späteres Suchen ungemein.

    Gleiche Vorgehensweise kann man selbstverständlich bei der Benennung der Dokumente vornehmen. Bei einem Kunden, der sehr viele verschiedene Produkte anzubieten hatte, habe ich Ordner mit Namen wie drucker, fax etc. angelegt. Innerhalb dieser Ordner kann man auch mit Zahlen arbeiten, um eine alphabetische Sortierung zu umgehen, die ja nicht unbedingt der logischen Reihenfolge der Dokumente entsprechen muss.

    Gruß
    Ronald

  3. Hallo,

    HTML-Dateien habe ich alle in einem Verzeichnis, so wie in SELFHTML (Danke Steffi). Grafiken liegen in einem extra Verzeichnis, aber nur zum Teil. CGI-Scripts liegen in /cgi-bin, so wie mir das mein ISP eingerichtet hat (Danke Fritz).

    Die Strukturierung der WebSite in Ordner, Unterordner usw. mache ich rein virtuell, also nur mit HTML und Verlinkung.

    Hilfreich für Seitenaufrufzähler u.a. Finessen ist eine reine Textdatei, in welcher die virtuelle Struktur abgelegt und editierbar ist. Darin steht

    • URL einer jeden Seite (Datei)
    • Titel
    • Beschreibung
    • Ordnerzugehörigkeit
      [- Suchworte für die lokale Suchmaschine]

    Insofern ist es mir bspw. möglich, eine HTML-Datei in einen anderen virtuellen Ordner zu schieben, Ohne dass sich die URL ändert (Danke w3.org). Und überhaupt ist es manchmal ganz gut, serverseitig eine solche Datei, als Index-Abbild, zu haben.

    Viele Grüße,
    Horst Haselhuhn

    1. Danke Horst!

      Hilfreich für Seitenaufrufzähler u.a. Finessen ist eine reine Textdatei, in welcher die virtuelle Struktur abgelegt und editierbar ist. Darin steht

      • URL einer jeden Seite (Datei)
      • Titel
      • Beschreibung
      • Ordnerzugehörigkeit
        [- Suchworte für die lokale Suchmaschine]

      So eine Datei (genauer: eine .pl-Datei mit einem Hash) hatte ich für meine makenav.pl angelegt, welche mir den kompletten Header generiert (Link-Navi u.A.). Mittlerweile wird files.pl von zwei oder drei weiteren Skripten benutzt...

      Mir gefällt es aber nicht (weil nicht »weitergebbar«), weswegen ich mit komplexeren Datenstrukturen am 'rumwurschteln bin. Ziel ist am Ende, dass der »Webmaster« seine Struktur nach einem bestimmten Muster in eine Textdatei ablegt, die dann in eine komplexe Datenstruktur (HoHoAoHoH ... o.Ä) umgewandelt werden kann, die dann von makenav und anderen Skripte benutzt werden kann.

      Um auf die OP-Frage zurück zu kommen: Ich habe reelle Unterordner im Root für die jeweiligen »Rubriken«, sowie ein Ordner /includes für die .txt, ein Ordner /files für .css, .js, ein Ordner /pics für Grafiken, /fotos für alle Fotographien außer denen im /roadster-Verzeichnis, noch eins (/selftml) für die frz. Version von SELFHTML zum Download, ein Ordner mit kryptischen Namen für den Formmailer (wird regelmäßig geändert - sowohl Verzheichnisname als Dateiname) und... jetzt bin ich aus der Puste.

      ;)

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?
      1. Hallo Patrick,

        Mir gefällt es aber nicht (weil nicht »weitergebbar«), weswegen ich mit komplexeren Datenstrukturen am 'rumwurschteln bin. Ziel ist am Ende, dass der »Webmaster« seine Struktur nach einem bestimmten Muster in eine Textdatei ablegt, die dann in eine komplexe Datenstruktur (HoHoAoHoH ... o.Ä) umgewandelt werden kann, die dann von makenav und anderen Skripte benutzt werden kann.

        Den Abbild meines Webindex habe ich in einer ini-Datei. Mit ein bischen Trick lassen sich da auch hierarchische Strukturen definieren. Diese Datei ist mit einem normalen Texteditor zu bearbeiten und lässt sich mit dem PERL-Modul Config::IniFile recht einfach auslesen (Siechfred hat an anderer Stelle auch schonmal auf die vorzügliche Verwendung dieses Moduls hingewiesen: zum Auslagern globaler Variablen).

        Auf meinem Web habe ich denn auch ein CGI-Script, was aus der ini den WebTree zaubert und eine griffige Navigation, sprich: Browsen durch virtuelle Verzeichnisse, ermöglicht. Apropos Browsen durch Verzeichnisse: Das Browsen zur Laufzeit durch reelle Verzeichnisse ist erstens langsamer (z.B. wenn der Titel eines Dokuments zur Laufzeit ermittelt wird) und zweitens sicherheitstechnisch bedenklich. Und nicht zuletzt: Ordnerstrukturen und Dokumentenhierarchie lassen sich in der ini-Datei vorzüglich planen, wenn nicht sogar einfacher und übersichtlicher als auf der Ebene des Dateisystems.

        In Summa mache ich mich mit virtuellen Ordnerstrukturen unabhängig vom Dateisystem und habe nur eine einzige Datei die ich bearbeiten muss.

        Viele Grüße,
        Horst Haselhuhn, einem Vetter des Moorhuhns ;-)

  4. Lieber Lars,

    in meinem CMS mache ich das im Wesentlichen so:

    Hauptordner
      |
      +-- css (für CSS-Dateien, die eher globalen Charakter haben)
      |
      +-- images (für Bilder und Ordner, die von mehreren Stellen benötigt werden)
      |   |
      |   +-- layout (für Layout-Grafiken)
      |   |   |
      |   |   +-- ie-fix (für Layout-Grafiken, die für den IE "optimiert" wurden)
      |   |
      |   +-- cms (Grafiken wie Icons für CMS-interne Dinge)
      |
      +-- js (für Javascripte)
      |
      +-- edit (hier gibt es eine index.html zum Anmelden am Bearbeitungssystem)
      |
      +-- scripts (hier sind die ganzen zu includierenden PHP-Scripte drin,
      |            je nach Zweck stehen sie in eigenen Unterordnern)
      |
      +-- irgendsoeinordner (hier stehen HTML-Dateien zu irgendsoeinem Inhalt)
      |   |
      |   +-- images (hier stehen Bilder für irgendsoeinen Inhalt)
      |
      +-- index.php (zentrales PHP-Script)

    Falls Du das genauer anschauen willst, dann kannst Du Dir ja mein PG-CMS ausprobieren...

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)