![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
|
Aloah. Stellen wir uns mal vor, jeder von euch hat ein eigenes Framework gebastelt und möchte nun Module dazu entwickeln. Wir würdet ihr die Einbindung realisieren? Denn ein Modul ist ja nur optional... Ich würde erstmal dem Framework ne index.php und jedem Modul nen eigenen Ordner mit eigener Struktur und eigener index.php verpassen. Nun gehts um das dynamische einbinden von Klassen via __autoload(). Soll ich die __autoload() des Frameworks von beginn an so programmieren, dass er nach Modulen sucht und auch dort schaut, ob es die Klassen gibt? Oder wäre es besser, jedem Modul eine eigene __autoload() zu verpassen, die auch auf das Framework zugreifen kann? Eine andere Idee wäre vielleicht eine registry.php in der alle Module und deren Klassen hinterlegt sind und die __autoload() arbeitet diese dann durch. Wäre so ne Art Index auf Dateiebene. Problem wäre die aktualisierbarkeit und die verlorengegangene Dynamik die ich mit __autoload() ja waren wollte. Also eher bäh die Idee. Wir habt ihr das gemacht? Wie würdet ihr das machen? Danke
__________________ I did it my way - Senseless-Blog |
| | |
| | Nach oben #2 |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Wie sehen die Module denn aus? Sind diese Module nur einzelne Dateien, oder manchmal wirklich ganze, quasi kleinere Frameworks? Wenn das nur einzelne Dateien sind, würd ich einfach einen neuen Ordner anlegen, diesen mit glob() auslesen (wobei ich irgendwo mal gelesen hab, dass die opendir()-Variante sogar etwas schneller sein soll?). In dem Fall müsstest du ja nicht so viel suchen, ein Ordner durchsuchen geht mit PHP wohl ziemlich rasch. So könntest du die einzelnen Module nachladen, und zwar dynamisch. Die andere Ar, über eine registry.php wär zwar auch denkbar, ist meiner Meinung nach aber dann ja nicht mehr so dynamisch - dann könntest du die auch gleich per *_once einbinden. Ich persönlich habe das wie in oben beschrieben gelöst (1 Ordner)
__________________ http://www.ChrisDiary.De |
| | |
| | Nach oben #3 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
Hm, das ist so eine Frage, über die ich mir schon 34mal beim Spazierengehen am Rhein Gedanken gemacht habe. Generell würde ich sagen, dass es die Möglichkeit geben sollte Module online "hinzuzufügen". Heißt also, dass man ein Modul zunächst einmal in den Ordner "modules"/"plugins"/was auch immer kopiert. Code: ./modules |- ./my_module |- .. So kann man vermeiden, dass Leute einen Blog nutzen, auch wenn kein Link zum Blog auf der Seite existiert, sondern die Leute über einen Bookmark da hingelangt sind. Jut. Bisher gut um die eigentliche Frage gedrückt. Eventuell sollte man von Beginn an standardmäßig den include_path um den Pfad zum "modules"-Ordner erweitern. Eine Klasse, die nun z.B. einen Blog darstellt läge also z.B. hier Code: ./modules/Blog/Modul.php Gut. Wenn man davon ausgeht, dass man im System eine zentrale Stelle hat, in der alle Pfäden zusammenlaufen, so müsste ja dort irgendwie jetzt eine Änderungen vorgenommen werden. Vielleicht nicht korrekt ausgedrückt ... es müsste dort nun irgendwie dynamisch festgelegt werden, dass, wenn ein bestimmter Link angeklickt, also ein spezieller URL aufgerufen wird, ein Modul gestartet werden soll. Wie das geht ... joaaa ... So ganz weiß ich das auch nicht. Möglich wäre z.B. die Arbeit mit einem include_once(). Man legt also im ACP fest, bei welcher URL das Modul aufgerufen werden soll (ich gehe jetzt mal davon aus, dass das ACP das dynamisch kann. Ist das nicht der Fall, so wird halt einfach ein fixer URL vorgegeben!). Sagen wir also, dass der Blog aufgerufen werden soll, wenn www.example.com/blog/ in der Adresszeile steht. In der "Zentrale" wird nun überprüft, ob der URL einem URL entspricht, der in der Datenbank hinterlegt wurde. Ist das der Fall, wird die damit verknüpfte Aktion ausgeführt: in unserem Fall also ein Modulaufruf. Nun wollen wir aber ja sicherstellen, dass in der "Zentrale" kein Code geändert werden muss ... somit erweitern wir ihn einfach mit einfachsten Mitteln. Setzt man regeln voraus, an die man sich halten muss, wenn man Module schreibt, so ist das sicherlich eine wirksame und einfache Möglichkeit eine Anwendung zu erweitern. Wir binden einfach eine "blog_actions.php" mittels include_once() in einer Methode des "Controllers" (so nenn ich das jetzt mal) ein und erweitern somit den dort vorhandenen Code. Es ist somit sogar möglich auf Klassenvariablen, z.B. ein Konfigurations- oder Datenbankverbindungsobjekt zuzugreifen! Das sehe ich persönlich an dieser Methode als sehr positiv an. Selbstverständlich muss jedes Plugin bzw. die einzubindende Datei so implementiert sein, dass keine Fehler auftreten. Dazu müssen dann eben strikte Regeln existieren. Wie gesagt .. ich habe da schon lange drüber nachgedacht und noch nicht wirklich die perfekte Lösung gefunden, obwohl ich die hier schon ganz nett finde .. Ich hör mir aber auch gerne andere Möglichkeiten an. Bei Fragen zu meiner Methode .. immer her damit. Grüße, Ben. |
| | |
| | Nach oben #4 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
|
Also die größe der Module muss definitiv nach oben offen sein. Es sind also nicht nur ein oder zwei Dateien sondern es können eigene Klassenstrukturen mit eigenen Templates und und und werden. Ich glaube es macht Sinn, wenn ich einem Modul eine eigene index.php verpasse und dort das Framework einbinde und damit arbeite. Problematisch wirds dann sicherlich wenn ein Modul auch ein anderes Benutzen könnte (optional) bzw braucht. Z.b. ein Adressverwaltung welches auch Geburtstage im Kalendermodul erzeugen kann, wenn Kalendermodul existiert und freigegeben ist. Die Lösung mit der Datenbank wäre in meinen augen ja die gleiche Lösung wie die registry.php. Vorteil bei der registry wäre, dass ich nicht erst eine DB-Verbindung/DB-Klasse einbinden muss um zu wissen was ich hab und kann... Horde hat das so gelöst: PHP-Code:
__________________ I did it my way - Senseless-Blog |
| | |
| | Nach oben #5 |
| Gast
Beiträge: n/a
|
Ich hab mir das ganze auch mal überlegt und ich bin zu folgender Lösung gekommen: Im Framework bestehen die Klassen nur aus Buchstaben zB MySuperClass Die Module werden aber Module_Asdf benannt. Folglich verwende ich für das Framework autoload Arrays und bei den Modulen wird einfach _ durch / ersetzt. Damit habe ich sinnvolle Namen im Framework zB anstatt Filter_Input InputFilter und bei den Modulen habe ich Module_Name_IncludeClass. Damit kann ich auch online einfach Module hinzufügen. Außerdem hat jedes Modul ein XML File wo eine individuelle Konfiguration gemacht werden kann und das Modul näher beschrieben wird. Die Liste der Module wird automatisch erzeugt. Ich lese einfach alle XML Files aus und führe den Titel, die Version, den Autor und die Beschreibung zu einem File zusammen (als Cache sozusagen). Objekte werden automatisch gecached. -- Jay |
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| PHP-Application Framework | mepeisen | Projekte unserer Mitglieder | 26 | 12.07.2007 15:12 |
| Zend Framework 0.8 veröffentlicht | Ben | Nachrichten | 1 | 26.02.2007 13:59 |
| Zend Framework 0.7.0 preview veröffentlicht | Ben | Nachrichten | 0 | 19.01.2007 12:10 |
| Wir unterstützen das inoffizielle deutsche Forum zum Zend Framework | Ben | Ankündigungen | 0 | 28.12.2006 15:51 |
| Suche Web Entwickler für ein Open Source Framework | xardias | Gesuche | 3 | 03.03.2006 00:10 |