Hallo Christian!
Plugins (oder Module, wie du es nennst) sind Teile der
Aussenwelt.
Ja? Ich kenne Plugins eigentlich nur vom IE. Das sind dann ganz andere Programme die von ganz anderen Firmen programmiert werden und in die Oberfläche des IE eingebunden sind. Meine Module stellen eher Erweiterungen das Basisprogramms dar, die Teil des Programms sind, wobei, das ist schon recht ähnlich.
Tja, aber die Datenquelle ist nicht alles. Z. B. sind
Variablen-Inhalte meist durch den Programmablauf bestimmt.
ich mache das zur Zeit so, dass ich global eine Datei in alle Scripte einbeziehe, in der die DB-Verbindung hergestellt wird, die Funktionen einmalig stehen, die ich dann in den Scripten nutze. Noch ein paar .ini Änderungen, sonst nichts. Ist das schon eine Schnittstelle?
Dann mach doch hier einen Punkt, an dem sich die Module
einhaken koennen. Jedes Modul, dass geladen wird, hat z. B.
eine Funktion/Methode 'menu' und gibt eine Struktur zurueck,
die die Menue-Struktur des Plugins beschreibt. Der Menue-Teil
macht dann daraus das HTML.
Aber wie sol ich mir das praktisch vorstellen? Wenn ich auf die Funktion "menu" zugreifen will muß ich die Datei mit include einbinden - dann darf es aber auch nur nur ein Modul geben da ein Funktionsname nur einmal existieren darf! Und warum soll ich das als Funktion speichern? Wäre es nicht besser als mehrdimensionaler Array? Also nur eine Funktion "menu" ins Hauptprogramm, und in den Modul-Dateien dann:
menu[]=array(menü-struktur...);
Dann kann die Funktion alle Modul-Dateien nacheinander öffenen und so den Array menu mit Inhalt füllen? Wäre es denn nicht besser die komplette Menüstruktur in eine DB-Tabelle oder eigene conf_datei zu schreiben, und dann bei der Installation des Moduls eine neue PHP Datei zu erstellen, die den kompletten, aktuellen Menü-Array hardcoded enthält?
Alles, was Funktionalitaet in sich birgt, muss dynamisch
geschehen. Alles, was mit dem Design zusammenhaengt, kann
statisch sein.
Das hängt aber alles sehr zusammen, was ist bei einem Kontakt-Formular, das enthält eine Funktionalität, das menü wird dynamsich eingebunden, was solte hier noch dynamisch sein? Mein Problem st, das ich mir jetzt außer dem Menü keine weiteren Möglichkeiten vorstellen kann wo noch etwas dynamisch geschehen müßte.
Wie mache ich jetzt der Menüleiste klar
das diese Datei ab heute ebenfalls abgefragt werden soll?
Da gibts verschiedene Strategien. Einige lesen ein Verzeichnis
aus, in dem alle Module liegen muessen, anderen arbeiten mit
Konfigurations-Dateien. Ich halte zweiteres fuer sinnvoller.
Also eine eigene Konfigurations-Datei für alle Einstellungen, die durch ein Modul beeinflußt werden können, nur was steht dann darin? Nur:
Modul-menuepunkt1
Modul-menuepunkt3
Modul-menuepunkt2
eine einfache Liste der menü-Punkte? Udn wenn noch was dazu kommt? Leider weiß ich kein Beispiel, aber in welcher Form sollte das dann da stehen? Und das größte Problem: Wie erstelle ich diese Datei? Das doofe ist ja, ich muß wissen welche Module bereist installiertund welche dazu kommen, das muß ja dann alles in der Datei stehen!
Und woher weiß ich vorher wie die Funktion heißen wird?
Entweder, du gibst das vor (das ist gar nicht so selten, das
wird sehr oft gemacht
wie denn praktisch? bei 2 Modulen: menu1() und menu2()? Und woher weiß ich dann wieviele Module das sind...?
Bei OO waere das ein typisches
Konstrukt fuer Vererbung: die Elternklasse wuerde die
Schnittstelle in Form einer abstrakten Klassen darstellen und
die Kind-Klasse wuerde sie implementieren
Was soll ich hier vererben? Das Problem ist ja an anderer Stelle, ich muß erstmal wissen welche Module ich habe und mit der Information z.B. die Menü-Struktur ermitteln. Nur ich weiß weder wie ich an diese beiden Informationen kommen soll, noch was das ganze mit Klassen zu tun haben soll.
oder du hast eine
Konfigurations-Variable, in der Referenzen gespeichert sind.
Referenzen worauf? Und wo bekommt die Variable diese Informationen her?
Hm? Wie soll das gehen? Nenn bitte mal ein Beispiel.
Du kennst if()s? :)
ja, ich meinte eher Praxisbeispiele.
Nein! Bitte nicht :) Aus so einem "Konzept" enstehen die
ekeligsten Codes.
Ich werde das vermutlich dann kompleztt neu programmieren und nur Teile übernehmen, und dann unter anderen Gesichtspunkten(Erweiterbarkeit, Pflege...) den neuen Code schreiben.
Ich kann dir, wenn du moechtest, mal ein Konzept fuer eine
PHP-basierte Groupware, die ich gerade schreiben muss,
darlegen. Mach ich jetzt aber so nicht ungefragt, das gibt
ein laengeres Posting...
Sehr, sehr gerne! Bin _immer_ an gutem Code sehr interessiert!
Von wegen PHP-Groupware, http://moregroupware.sourceforge.net/ ist diebeste PHP-basierte Groupware die ich kenne. Leider noch nicht so richtig fertig, aber ich denke das wird eine gute Sache. Falls Du es nicht kennst, ist bestimmt interessant! Ich habe auch nochmal geguckt, die haben ja auch Module, vielleicht kann ich da ja auch was von gebrauchen.
Viele Grüße und vielen Dank!
Grüße
Andreas