Struktureller Aufbau eines Web-Projekts (Dateiaufbau, Abfolge Aktionen, etc.)

muhkuh

Erfahrenes Mitglied
Huhu,

mir liegt die Sache schon eine ganze Weile auf dem Tisch. Ich würde von euch gerne mal wissen, wie ihr den Ablauf eines Scripts gestaltet. Genauer, wie ihr euer Projekt anlegt - wo passiert was und wie passiert es. Ich hab mir da eine Methode angewöhnt, nach der ich mittlerweile bei praktisch jedem Projekt verfahre. Diese Methode hat einige Vorteile, da sie, denke ich zumindest, recht übersichtlich ist und insgesamt recht modular angelegt ist, sprich lässt sich vielfach verwenden. Hat aber nichts mit Klassen o.ä. zu tun ;)

Struktureller Aufbau meiner Index-Datei:
PHP:
<?php
 include der Konfigdaten,
 session_start, etc.,
 
 Switch für Datenbankanfragen (add,edit,delete und update)
 switch( $_GET[ 't' ] )
 {
    case 'news': include( 'news.php' ); break;
    case 'artikel': include( 'artikel.php' ); break;
    case 'gaestebuch': include( 'gaestebuch.php' ); break;
    default: echo '';
 }
?>
HTML-Header
Menü, etc.
<?php
 // Content
 include der Module (Menüpunkte: News, Arttikel, Gästebuch, etc.)
?>
HTML-Footer
Wohlgemerkt nur die sehr grobe Struktur :)

Jedes Modul hat bei mir eine eigene Datei. Das Modul wird über den Parameter $_GET[ 's' ] included, ist dieser noch nicht vergeben (erster Seitenaufruf) wird eine vorher festgelegtes Modul included.
In der Datei jedes Modules ist die Ausgabe strikt von den Datenbankoperationen getrennt, bzw. die Ausgabe von den Header-Operationen.

Beispiel Gästebuch:
PHP:
<?php
// Datenbank- / Header-Operationen
 if( $_GET[ 'b' ] == 'add' )
 {
    // Abfrage, ob alle benötigten Datensätze vorhanden sind
    if( !$_POST[ 'name' ] || !$_POST[ 'text' ] )
    {
       header( 'Location:index.php?s=gaestebuch' );
       break;
    }
   
    // Bearbeiten der Datensätze aus $_POST in ner Schleife 
    // (trim, htmlspecialchars, etc), Übergabe an das Array $post

    // Speichern der Daten in der DB
    $sql = mysql_query( "INSERT INTO
                              tbl_gaestebuch
                         (
                              name,
                              text
                         )
                         VALUES
                         (
                              '" . $post[ 'name' ] . "',
                              '" . $post[ 'text' ] . "'
                         )
                    " , $connection );
    // Auf Fehler überprüfen
    !$sql ? header( 'Location:index.php?s=gaestebuch&sql=fehler#add' ) 
            : header( 'Location:index.php?s=gaestebuch' );
 }
 
// Ausgabe
 if( !$_GET[ 'a' ] || $_GET[ 'a' ] == 'show' )
 {
    $sql = mysql_query( "Hier alle DAten aus der Datenbank, etc." );
    // Ausgabe braucht nicht näher beschrieben zu werden :)

    echo '<form action="index.php?t=gaestebuch&b=add" ';
    echo 'name="add" method="post" enctype="apllication/x-www-form-urlencoded">';
    echo 'Hier ist das HTML-Formular';
    echo '</form>';
 }
 elseif( $_GET[ 'a' ] == 'eintragdetails' )
 {
   // Ist eigentlich totaler Schwachsinn, aber wäre Möglich 
   // -> Was man mit dem Parameter "a" alles machen kann ;)
 }
 else
 {
   // Hast was gemacht, das nicht bearbeitet wird?!
 }
?>

Erläuterung zu den Parametern:
  • "s": wird über "_GET" übertragen und beinhaltet das Modul, dass im Content included wird
  • "a": Gleichbedeutend mit "action", behinhaltet die Aktion, die das Modul ausführen soll, nur für die Ausgabe gedacht
  • "t": Pendent zu "s", lediglich wird hier das Modul im Header-Bereich des Indexes included und führt dort eben die "Header-Operationen" aus.
  • "b": Pendent zu "a", lediglich für die Header-Operationen jedes Moduls. Ist eigentlich nur da, um Überschneidungen mit "a" zu beheben, bzw. die Werte beider Parameter identisch zu lassen (-> bessere Übersicht)


Hab mir diese Methode angewöhnt, als ich noch nicht wusste, dass es die Funktion ob_start() und ob_end_flush() gibt, die das ganze erst einmal in den Speicher packen und dann gut sortiert ausgeben ;)
Wie gesagt, hat die Methode ein paar schöne Vorteile, wie zum Beispiel, dass ich praktisch alle Aktionen eines Moduls nur in einer Datei habe. Da ich die Administration meiner Projekte immer komplett getrennt von der Ausgabe für den Otto-Normal-Surfer habe sind hier auch die Dateigrößen verschmerzbar. Bei größeren Sachen, wie zum Beispiel nem Board splitte ich das dann auch auch auf mehrere Dateien auf (Jedes mal 45Kb laden zu lassen, von denen ich eigentlich nur 4-10 bräuchte, ist irgendwann auch zu viel :)


Weil ich aber auch ein wenig in dieser Methode festgefahren bin, was mir nicht sonderlich gefällt, würde ich gerne von euch wissen, wie ihr eure Projekte strukturell aufbaut. Hab mich auch langsam in Templates eingearbeitet, aber davon abgesehen müsste es doch noch weitere Möglichkeiten geben, die vielleicht sogar noch mehr Vorteile bieten.


Grüße, Tilman
 
In letzter Zeit baue ich alle Projekte nach dem MVC-Pattern auf.

Es gibt viele sehr gute Frameworks mit denen sich schnell größere Projekte umsetzen lassen.

greetz
daddz
 
Joa, das is cool :) Und vor allem praktisch. Wenn man es net so streng nimmt, ist mein Verfahren ja sogar an MVC angelehnt :)
 
Zurück