Willkommen in der Webstatt Zum Webstatt Blog und Stories
Rebel4s Rebel4s am 17.07.07 10:02

Hallo,
Bei manchen CMS ist das ja so, z.B. bei Joomla, dass man da ganz einfach Module installieren und deinstallieren kann und sich die Module dann auch automatisch in die Seite einfügen.

Da ich momentan auch an einem CMS sitze, würde mich mal interessieren, wie man so ein System realisieren kann. Vielleicht hat ja schon jemand mit sowas Erfahrung.

Hab eigentlich nichts über dieses Thema bei Google gefunden und dann die besagten CMSs nach dieser Funktion durchzuforsten... da dachte ich mir, frag ich mal die Profis hier.

netcup.de Warum gibt es hier Werbung?
danieL danieL am 17.07.07 10:10

evtl. hilft dir das ja teilweise weiter: Frage zu Modulsystem

Rebel4s Rebel4s am 17.07.07 10:22

Quote
Original von danieL
evtl. hilft dir das ja teilweise weiter: Frage zu Modulsystem


leider nicht.

bastey bastey am 17.07.07 11:01

Ich mache das mit Hooks. Sprich, ich habe stellen im Quelltext wo Datein geladen werden, die vorher als Modul hinzugefügt worden sind.

In der Regel braucht man nicht so viele Hooks. Das hängt aber vom System ab (wie komplex es ist .. etc).

Ich setzte sie mind. beim laden aller Classen und Funktionen, vor der Ausgabe von Content, nach der Ausgabe von Content und nach dem schließen der DB-Verbindung.

Im Modul muss halt definiert werden, wann dieses geladen werden soll. Hofe hast verstanden wie ich das mache und meine.

Rebel4s Rebel4s am 17.07.07 11:39

Quote
Original von Dionysos
Ich mache das mit Hooks. Sprich, ich habe stellen im Quelltext wo Datein geladen werden, die vorher als Modul hinzugefügt worden sind.

In der Regel braucht man nicht so viele Hooks. Das hängt aber vom System ab (wie komplex es ist .. etc).

Ich setzte sie mind. beim laden aller Classen und Funktionen, vor der Ausgabe von Content, nach der Ausgabe von Content und nach dem schließen der DB-Verbindung.

Im Modul muss halt definiert werden, wann dieses geladen werden soll. Hofe hast verstanden wie ich das mache und meine.


Jo, könnteste mal ein Codebeispiel machen?

bastey bastey am 17.07.07 12:11

Nö, kann ich nicht. Weil, was soll ich da für nen Beispiel machen .. ?


/**
* gaaaanz viel Code kommt hier
**/

hook(HOOK_ID);

/**
* noch mehr code
**/


## function hook fragt ab, ob für die HOOK_ID nen Eintrag vorhanen ist. Wenn ja,
## wird dieser halt eingebunden.

function hook ( $hid ) {
$db->request($hid);
if($db->result){
include $db->result->include_file;
}
return True;
}

Rebel4s Rebel4s am 17.07.07 12:22

Aber durch die Festlegung wann so ein hook ausgeführt, bzw. wo wird doch das ganze sehr undynamisch oder?

hoffie hoffie am 17.07.07 12:46

Quote
Original von Rebel4s
Aber durch die Festlegung wann so ein hook ausgeführt, bzw. wo wird doch das ganze sehr undynamisch oder?

Das kommt darauf an wie viele Hooks du hast, an welchen Stellen sie sind und ob du evtl. Daten darüber verarbeitest (z.B. Parsen von Text könnte man durch alle Plugins durchreichen.. eins macht Smileys, eins BBCode oder so).
Letztendlich hast du eh keine anderen Möglichkeiten. :)

bastey bastey am 17.07.07 12:48

Quote
Original von hoffie
Letztendlich hast du eh keine anderen Möglichkeiten. :)

Naja .. er könnte auch durch nen Updater den Quellcode umschreiben .. aber das wäre .. naja .. Hooks find ich besser.

hoffie hoffie am 17.07.07 12:51

Quote
Original von Dionysos
Naja .. er könnte auch durch nen Updater den Quellcode umschreiben .. aber das wäre .. naja .. Hooks find ich besser.

Das wären dann aber keine Module, sondern vielleicht "Extensions", die den Code patchen. Das ist absolut unsauber, schlecht wartbar und die "Module" kommen sich schnell in die Quere. Man sieht an qmail, wie lustig das endet...

Rebel4s Rebel4s am 17.07.07 12:52

Genau, das find ich auch nciht so gut, aber wie könnt man das genauso dynamisch lösen ohne irgendwas zu ändern, sondern vielleicht nur durch andere Methoden zu überschreiben.

hoffie hoffie am 17.07.07 13:35

Quote
Original von Rebel4s
Genau, das find ich auch nciht so gut, aber wie könnt man das genauso dynamisch lösen ohne irgendwas zu ändern, sondern vielleicht nur durch andere Methoden zu überschreiben.

Dafür ist PHP dann aber die falsche Sprache. Und mit anderen Plugins wird das dann immernoch nicht gut zusammenarbeiten. :)

Rebel4s Rebel4s am 17.07.07 13:37

Kannst du mir dann sagen wie man das sonst realisieren könnte?

bastey bastey am 17.07.07 14:19

Eine andere Möglichkeit wäre, alle Codeelemente in einer Datenbank zu speichern. Und das die Module bzw. Updates diese verändern bzw. überschreiben. Natürlich würde man ein Backup der alten Datein benötigen. So könnte man das auch alles wieder schnell und einfach rekonstruieren.

Eigentlich ne schöne Idee finde ich :)

Kommentare dazu bitte.

Rebel4s Rebel4s am 17.07.07 14:40

Ich finde dann wird alles etwas Zweckentfremdet.

bastey bastey am 17.07.07 14:47

Wie meinst du das?

Rebel4s Rebel4s am 17.07.07 14:50

Ich finde, dass der code schon in den php Dateien stehen sollte.
Man könnt zwar dann aus dem Inhalt der Datenbank die PHP Dateien erstellen, jedoch kann ich mich damit nicht sorecht anfreunden.

bastey bastey am 17.07.07 14:53

Naja, du musst dich entscheiden. Du hast 3 gute Möglichkeiten (also ich finde sie gut) gehört.

hoffie hoffie am 17.07.07 16:10

Und voila, schon wird jedes SQL-Injection-Problem zum Remote-Code-Execution-Problem.

bastey bastey am 17.07.07 21:35

Das war ja nicht die Frage .. bzw. wir haben hier ja nicht über eventuelle Sicherheitslücken gesprochen. Es geht hier halt um die Möglichkeit Mods zu benutzen/verwalten. Und das mit der DB wäre EINE Möglichkeit.

nuit nuit am 17.07.07 22:18

Quote
Original von Dionysos
Das war ja nicht die Frage .. bzw. wir haben hier ja nicht über eventuelle Sicherheitslücken gesprochen. Es geht hier halt um die Möglichkeit Mods zu benutzen/verwalten. Und das mit der DB wäre EINE Möglichkeit.

Naja...ich denke hoffie will damit auf seine Weise ausdrücken, dass das keine so gute idee ist ;)

@hoffie: beschreib doch mal wie du es in hesasys machst :P

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt