CMS -> Erster Anfang

  • Hi

    Ich wollt wissen ob ihr verbesserungsvorschläge für diesen Code habt:

  • Hallo,

    zu deinem Code kann ich im Moment nichts sagen.
    Bevor du dein Thema pushst, sollstest du ruhig noch etwas Geduld haben. Dein Code hat schon ein paar Zeilen mehr, da muss man schon etwas Zeit haben, wenn man sich den anschaut.

    Da ist nach einem Tag pushen doch etwas schnell.

    Gruß

    Sascha

  • PHP
    $database = mysql_connect($db['host'], $db['user'], $db['pwd']);


    Das finde ich nicht so gut gelöst. Besser ist

    PHP
    $database = @mysql_connect($db['host'], $db['user'], $db['pwd'])
           or die("Connection failed");


    So bekommst du nicht die hässliche Fehlermeldungangezeigt, wenn mal was nicht mit dem DB-Server stimmt.

    PHP
    if ($row->name == NULL OR $row->active == 0)


    Da würde ich eher auf mysql_num_rows zurückgreifen.

    $_SERVER['PHP_SELF'] würde ich austauschen gegen $_SERVER['SCRIPT_NAME']

    Und reine Geschacksache sind solche Zeilen:

    PHP
    $sql = "SELECT sec_id, cat_id, name, description, w_order, active FROM category WHERE sec_id='".mysql_real_escape_string($load['sec_id'])."' AND active='1' ORDER BY w_order";


    ich meine, soetwas ist immer schwer zu lesen, ich bevorzuge


    Wenn dein gesamtest Script nur diese DB-Zugriffe macht, ok, aber ansonsten würde ich ein DB-Connect nicht in so eine Funktion packen.

  • Mit welcher PHP-Version arbeitest du?
    Ich persönlich würde das ganze etwas object-orientierter programmieren. So hast du nicht so einen riesigen if-else-Block.

    Ich würde dir auch empfehlen dieses Design-Pattern zu nutzen.
    http://de.wikipedia.org/wiki/Data_Access_Object

    Zusammen mit dem Factory-Pattern ist deine Anwendung dann ziemlich flexibel, was die Persistence-Schicht angeht.
    http://de.wikipedia.org/wiki/Factory-Pattern


    Ich persönlich würde ein CMS eher in Java schreiben, da man durch ein OSGI-Framework das CMS sehr leicht erweitern könnte.

    Gruß

    Sascha

  • Mal kurz erklärt wie du das DAO-Pattern umsetzen könntest.

    Du schreibst dir ein Interface. Dieses definiert die Methoden die du zum speichern, löschen, updaten, suchen benötigst.

    Dann schreibst du dir eine Klasse, die dieses Interface implementiert. Diese Klasse kannst du dann ausprogrammieren.

    Dann solltest du überall nur noch das Interface nutzen, wenn Sachen laden, speichern usw möchtest. Das DAO solltest du auch nur über eine Factory anlegen.

    So kannst du leicht das DAO austauschen.
    Als Beispiel:

    Du willst in eine Datenbank speichern. Schreibst die ein entsprechendes DAO. Dieses wird in deinem CMS überall mit der Factory angelegt.

    Später kommst du auf die Idee alles in XML-Dateien zu speichern. Dann brauchst du dir nur eine neue DAO-Klasse zu schreiben, das entsprechende in der Factory zu ändern und schon speichert dein ganzes CMS in einer XML-Datei. Und das ohne, dass du den restlichen Code verändert hast.

    Gruß

    Sascha


    Wenn du das ganze dann auf einer anderen Datenbank haben möchtest, brauchst du nur eine neue Klasse zu schreiben.

  • Noch ne Frage:

    Soll ich so machen, dass ich in der Template index.php Plazhalter habe die nacher von der normalen index.php durch die php funktion ersetzt werden oder gleich in der index.php die Template datei einbinden in der die Funktionen schon per <?php function() ?> eingebunden sind?

  • Hab jetzt mal mit Klassen angefangen das ganze zu strukturieren, aber jetzt geht das nicht:

  • Wenn ich nachher etwas Zeit hab, werde ich mal etwas Code vorbereiten, wie man das mit so einem DAO lösen könnte.

    Gruß

    Sascha

    EDIT:
    Ich hab mal nach OR-Mappern in PHP gesucht. Ich muss sagen, die funktionieren etwas anders als ich es kenne. Ok, ich bin eigentlich Java-Programmierer. :) Aber die Syntax von Java und PHP5 ist fast gleich.

    Worauf ich hinaus möchte ist, dass du deine Daten als Object definierst.
    BSP:

    So könnte die Klasse zu einem Artikel aussehen.

    Als OR-Mapper könntest du dann das verwenden
    http://cakephp.org/

    Das erleichtert dir das Speichern der Objecte in der Datenbank. Du musst dich eigentlich gar nicht mehr um SQL-Statements kümmern oder wie du deine Objecte zusammen bekommst.
    Es hilft die auch, deine Anwendung etwas strukurierter zu bekommen, da es das MVC-Pattern benutzt.

    Ich würde dir empfehlen das mal anzuschauen.

    Gruß

    Sascha

    Einmal editiert, zuletzt von sashs (16. Februar 2009 um 22:06)

  • Hab jetzt mal mit Klassen angefangen das ganze zu strukturieren, aber jetzt geht das nicht:


    Setz erstmal in deiner Schleife ein $ vor i im index deines arrays.
    Sonst belegst du bei jedem Schleifendurchlauf einfach immer wieder den statischen index i und der index 0 kann auch nicht belegt sein bei deiner Ausgabe nach der Schleife.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook