Entwicklung von Modulen für eigene Anwendung

Hi,

ich hab schon verschiedene kleine und große Projekte in PHP+MySQL+JavaScript realisiert…

Nur waren das immer eigene, abgeschlossene Projekte, welche dann nicht erweiter werden sollten/konnten.

Jetzt wollte ich gern eine Anwendung schreiben, welche auch im nachhinein durch einfaches hinzufügen eines Moduls/Plugins erweitert werden kann.
Wie stelle ich sowas am besten an?
Wo sage ich der Anwendung: Schau hier hin, da findest du alle Plugins.
oder: wenn das, dann lade diese funktionen.

Es muss ja auch für die Module/Plugins möglich sein, zu jeder Zeit an jedem Ort zu funktionieren.
Muss ich mir da eine art Trigger-System einfallen lassen? Z.B. wird bei einem Login ein Trigger ausgelöst. Plugins, welche beim Login wirken sollen, ahlten danach ausschau und legen dann los. oder so in der art?

Vielen Dank für eure Hilfe.:razz:

Ich hab es bisher immer so gemacht, dass ich meinem Hauptobjekt der Anwendung Meine Module einfügen kann durch eine Methode. Als Beispiel

// 1. Argument: Klassenname als String // 2. Argument: benötigte Argumente als Array // 3. Argument: Modul für welche Schnittstelle? (zum Beispiel Login oder indem fall für alle) $mainApp->addPlugin("database",array("localhost","dbuser","dbpassword","dbname"), "All"); Du musst dir dann nur schön Schnittstellen erstellen wo die Module geladen werden.
So mach ich es wenn ich Anwendungen erweitern will :slight_smile:

Das Laden ist einfach: Du includest einfach alle Dateien aus einem Ordner. Dann stellen die Plugins entweder Funktionen und Klassen bereit, oder, wie du schon sagtest, nutzen Funktionen deiner Anwendung und verändern Sachen. Oder beides. :wink:

jo, das mit dem include aller Dateien hatte ich auch schon überlegt

dabei habe ich so gedacht:

Ein Ordner in den alle Module kommen:
MODULE

Für jedes Modul dann darin einen Ordner:

MODULE/MeinModul

Jedes Modul muss über die Datei function.inc.php verfügen, in dieser stehen dann alle weiteren, modul-spezifischen sachen
Eventuell könnte man da auch immer eine Funktion oder ähnliches einbauen, welche auf Abhängigkeiten prüft (für andere Module)

Mal sehen wie ich das hinbekomme.

Ich stell mir das halt schwer vor, dem Programm dann auch die Möglichkeit zu geben, das Inhalte durch die Module verändert werden etc…:?

Ich würde das Modulverzeichnis per Script durchlaufen und automatisch standardisierte Include-Dateien aller gefundenen Module Includen.
Anders gehts nicht, wenn die Dateien nur hochgeladen und sofort erkannt werden sollen. Ist allerdings recht langsam.

Zur Performancesteigerung würde ich einen Adminbereich erstellen.
Beim Login in den Adminbereich wird der Modul-Ordner gescannt. Im Adminbereich selbst können die zu aktivierenden Module dann ausgewählt werden.
Beim speichern werden die entsprechenden Include-Befehle für die Module erzeugt und in eine Datei (zB. „include_modules.inc.php“) geschrieben.
Im Hauptscript wird einfach nur noch die „include_modules.inc.php“ eingebunden und fertig.

Alle weiteren Aktionen (Inhalte durch Module verändern) können auf eine ähnliche Art und Weise realisiert werden.

Hoffe, es war einigermaßen verständlich :wink:

Für dein vorhaben muß man ein Routing Script schreiben/erstellen.Die Module sind getrennt daher hat jedes Modul auch seinen eigenen Ordner(Verzeichniss)

Der unterschied bei Plug ins ist das alle Scripte(Module) auf die Plug ins zugreiffen können. Diese stehen dann wieder in einem eigen Ordner der Zentrall definiert wird und bei bedarf die Plug ins ladet.
Ein gutes Beispiel dafür findest du im Zend Framework das hat diese Eigenschaften schon fertig Programmiert.

Willst du so ein Routing aber selber schreiben dann steht noch viel Arbeit vor dir wenn du das Proffesionell und vernüftig schreiben willst.

Du brauchst also kein such script sonderen einen Schematik vernüftigen Aufbau.So das man immer weiß wo was zu finden ist. Ohne das das Script selbst danach suchen muß. Hierbei mußt du auf die Dateiname vergabe sehr genau achten damit das ganze funktioniert.
Ähnlich wie bei der __autoload() funktion werden dann die benötigten Teile nachgeladen.

Mfg Splasch

ein include über alle dateien ist nicht gut.

ich würde dir empfehlen eine Klasse zu schreiben, welche ein Plugininterface implementieren muss.

beispiel:

dein_framework/plugin/guestbook/guestbook.plugin.php

nachdem im adminplanel das plugin aktiviert wurde, werden in der guestbook.plugin.php methoden aufgerufen, → hooks.

möglicher auszug aus der guestbook.plugin.php

__contruct()
{
$this->hook->add($this->hook->init, ‚this/init‘);
}

function hookInit($initArgs)
{
die(‚programm wurde initialisiert‘);
}

dein programm muss natürlich überall hooks haben welche aufgerufen werden, bei einem kleinen cms können das schonmal rund 500 stück werden.
die Plugins leitest du von einer globalen plugin klasse ab, diese stellt die Hook, Datenbank, Debug, … Funktionen. Neben Hooks werden häufig Filter verwendet.

oha, klingt ja schon mal recht kompliziert.
Muss gleich dazu sagen, hab noch nie mit Klassen gearbeitet.

Aber das schau ich mir demnächst da mal an.
Danke dir :smiley:

Ui :smiley:
Also da würde ich mir mal zunächst Klassen anschauen. Die erleichtern einem sehr das Leben. Besser als wenn man 100 Funktionen hat :smiley:

bisher hab ich immer alleine an meinen projekten entwicklet, da waren klassen einfach nicht nötig :wink:
letzten endes sind es auch wieder „nur“ funktionen, halt anders verpackt.

:-o

Klassen helfen aber auch, wenn du alleine programmierst, da sie modular sind. So habe ich zum Beispiel eine MysqlDatabase Klasse geschrieben, die in verschiedenen Projekten einsetzen kann. Denn Wenn du für jede Klasse eine Datei erstellst, hast du einen Überblick was du an Objekten brauchst. Natürlich lässt sich das auch einigermaßen mit Funktionen umsetzen, dennoch musst du dann darauf acht geben wie du deine Funktionen benennst damit sie nicht doppelt vorkommen. Mit Klassen hingegen, kannst du gut und gerne Methoden definieren, die in anderen Klassen auch existieren. Zum Beispiel wäre es dann möglich eine read-methode in 2 Klassen zu schreiben. Der Umstieg von Funktionen auf Klassen ist zum Glück auch nicht all zu schwer. Denke jeder hier wird dir raten auf OOP umzusteigen. :slight_smile:

modular ohne klassen zu entwickeln ist unfug :slight_smile:

wenn dich programmierung interessiert lern den umgang mit klassen, danach reden wir weiter über modulare entwicklung und design pattern.

gibt übrigens kaum eine Sprache in der man nicht mit klassen arbeiten kann. :slight_smile: