Modul System realisieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Modul System realisieren

    Hallo,

    Man kennt es auch Worpress, Jommla und Co, das Modul System.
    Nun will ich für mein Projekt das gleiche Realisieren aber wie genau ich dort ANfange und welche Techniken ich einsetze steht noch nicht fest.

    Welche Techniken gibt es da?

    Habe mir folgendes überlegt.
    Eine FUnktion schreiben die einen bestimmten Ordner ausliest. In diesem befinden sich die Module und werden automatisch eingelesen.
    Entferne ich eins dieser Module zb durch Löschen aus dem Ordner wird zb das Modul entfernt. ALlerdings ist da die Frage wie ich dann die SQL imports machen kann und wie ich das ganze aus
    meinem Projekt ansteuer zb ein neuer Link im Menü etc

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fragz ()

  • Hallo Fragz,

    die Frage habe ich mir auch vor ein paar Wochen gestellt und habe dabei folgendes herausgefunden:

    Joomla macht es ja so, das man alle Dateien in einem ZIP-Archiv herunterladen kann und dann im Admin-Bereich hochladen/installieren kann. Dabei entpackt Joomla das einfach nur und schiebt es in die entsprechenden Ordner. Die Ordner werden dann denke ich mal einfach ausgelesen und included. Ist eigentlich eine total simple Sache.

    Eine andere Möglichkeit ist, wobei ich nicht genau weiß, wo das eingesetzt wird: Man lädt ebenfalls ein Archiv hoch und in einer XML-Datei stehen Anweisungen, was das Modul-System zu tun hat und baut es richtig in ein vorhandenes System ein, also eine Art suchen und ersetzen. Das ist denke ich mal deutlich schwieriger. Welchen Vorteil das dann hat, weiß ich auch nicht genau... :D

    Ich persönlich finde das Plug-in-System von Woltlab (Burning Board) sehr gut. Man kann im Admin-Bereich nach Plugins suchen und mit einem Klick direkt online installieren. Einfacher geht es glaube ich nicht mehr. Wie genau das da läuft, weiß ich nicht, ich denke aber mal wie bei Joomla nur das man die Plugins halt nicht erst herunterladen und dann wieder hochladen muss.

    So, genug dazu. Wie realisiert man das nun, ist deine Frage: Ich würde das ebenfalls mit einem ZIP-Archiv machen, welches eben entpackt wird und automtisch z.B. eine setup.php ausführt, die sich in diesem ZIP-Archiv befindet. Jedes Plugin sollte einen Datenbank-Eintrag machen wo enthalten ist, welche Dateien erstellt wurden, welche Tabellen neu angelegt wurden usw. Das hat den Vorteil, dass man sehen kann, welches Plugin nutzt welche Sachen in meinem System UND: Bei einer Deinstallation des Plugins müsste man nur schauen, welche Dateien stehen in der Datenbank und löscht die Dateien vom Server, entfernt die Datenbank-Tabellen wieder etc. Man wickelt im Grunde alles rückwärts wieder ab.
    Man kann dabei in der Datenbank die ganzen Dateien in einem Array abspeichern (Mit der PHP-Funktion serialize ist das sehr sehr angenehm!). Dadurch kann man ebenfalls ein System updaten. Dabei ersetzt man einfach nur vorhandene Dateien. Kann man also auch für andere Dinge nutzen.

    Das ist aus meiner Sicht das Einfachste und so würde ich es realisieren. Leider bin ich noch nicht dazu gekommen, da ich im Moment keine Idee habe, was ich noch programmieren soll :D
  • Hallo,

    Also mit dem zip archiv das sollte kein Problem sein.
    Ich meine da hab ich noch nen code schnippsel hier.
    Man läd eine tar.gz file hoch. DIese enthällt eine setup.php mit anweisungen für neue tabellen etc.
    Ebenfalls kann man in der setup.php angeben wo welcher Links oder welche funktion greifen soll. Das vorhandene System hat einige schnitstellen dafür und liest alles automatisch aus der Datenbank.

    Ist recht einfach und kommt ohne XML dergleichen aus.
    Da bin ich mir aber nicht sicher ob dies so das ware ist, klar es läuft ohne probleme aber zweifel sind da immernoch.
  • Woran genau zweifelst du denn?

    Zum Entpacken von ZIP-Archiven habe ich zufällig hier noch ein Schnipsel, der sollte super laufen:

    Quellcode

    1. $zip = new ZipArchive;
    2. $res = $zip->open('test.zip');
    3. $zip->extractTo(dirname(__FILE__));
    4. $zip->close();
  • Haha, sowas wollte ich auch schon mal machen, habe es aber nie umgesetzt weil ich mir auch nicht sicher war ^^

    Beim mir war die idee so:

    Der Plugin Ordner wird über ein PHP Script ausgelesen. Als wert hat man dann ja die Dateinamen in einem Array diese würden dann anschließend mit eine schleife einfach nur included und fertig.

    Das war meine Überlegung gewesen aber ich habe das gefühl das ist etwas zu Simpel für das was du vorhast.
  • Das war meine Überlegung gewesen aber ich habe das gefühl das ist etwas zu Simpel für das was du vorhast.



    Zu simpel? Es gibt mit Sicherheit noch viel komplexere Möglichkeiten. Du kannst Dein System auch so komplex gestalten wie du möchtest, nur ob du die Funktionen dann auch brauchst, ist eine andere Frage :D
    War ja auch nur ein Vorschlag, wie man es in etwa machen könnte.

    Man braucht doch eigentlich noch nicht mal jedes Modul zu includen, es reicht doch, wenn man es einfach entsprechend verlinkt und dann dadurch entsprechend aufruft. Naja, egal... :D
  • Janiboy schrieb:


    Man braucht doch eigentlich noch nicht mal jedes Modul zu includen, es reicht doch, wenn man es einfach entsprechend verlinkt und dann dadurch entsprechend aufruft. Naja, egal...


    Genau so arbeitet das System. Es wird zwar alles in die DB geschrieben aber erst aufgerufen wenn man man es benötigt.

    ZB:

    Quellcode

    1. $sql_update['code'] = 'include_once(PATH . \'/class_buy.\' . EXT);$BUY = new BUY();$title .= $BUY->link();';


    Dies wird dann so in die DB eingetragen. Man bindet die file und die klasse ein. $title ist eine Varibale im vorhanden System und eine im Modul. Im System ist $title zb für einen Link gedacht. Nun könnte man in die klassen funktion $link einen neuen Link für die Navi hinzufügen.

    Es funktioniert ohne Probleme aber ob ich echt alles in die DB eintragen soll zwecks Sicherheit?
  • Janiboy schrieb:

    Es funktioniert ohne Probleme aber ob ich echt alles in die DB eintragen soll zwecks Sicherheit?
    Was ist denn mit der Sicherheit?


    Achso ja, die Schnitstellen im eigentlichen System.
    Die Modul funktionen werden ja in die DB geschrieben und im eigentlichen System über

    Quellcode

    1. eval()


    aufgerufen. Soviel ich gelesen habe ist eval nicht schön da man es leicht umgehen kann und etwas einschläusen kann.