[PHP] Modulsystem verständnisfrage

strolch00

redraft.de
ID: 155297
L
21 April 2006
1.684
72
Hallo @all,

jetzt wo ich wieder etwas Zeit habe wollte ich mich mal schlau machen über ein Modulsystem. Sodas ich ein Grundsystem Programmieren kann und den ganzen rest über Module einfügen/installieren kann.

Ich grübel schon ne ganze Weile darüber aber ich komme auf keine Vernünftige Lösung wie man sowas realisieren kann.

Nehmen wir als beispiel Klamm.
Ich habe ein Grundsystem die Nackte Webseite.
Nun möchte ich zB das Refsystem und die Forumsbox einbinden.

Wie realisiere ich sowas eurer Meinung nach?
- installdatei schreiben
- Hookpoints

Wenn ich jetzt noch etwas zusätzlich einbinden will sagen wir das TV Programm, das mus aber aus irgendeinem an eine bestimmte Stelle im Code eingebaut werden wie kann man das dann realisieren.

Ich will das um zu erreichen das ich nicht mehr denCode anfassen muss. Um Updates zu erleichtern und und und.

Und kann mirnochmal jemand eine gute Seite zu dem Hookpoint system sagen? Bei google finde ich nicht wirklich was brauchbares. Am besten in deutsch aber English geht auch.

Danke schonmal an alle
*hoffe ich habe net viel verpasst in meiner Abwesenheit

*edit
Im grunde möchte ich sowas wie das Pluginsystem von smarty aber das durchwülen durch den Code hat mir bissher nix gebracht. Für sowas brauch ich den Ansatz.
 
Zuletzt bearbeitet:
*gg*
auf diese Frage habe ich bis heute auch noch keine ordentliche Antwort gefunden :LOL:
Eine weitere Möglichkeit könnte die ereignisgesteuerte Programmierung sein.
 
Was verstehst Du darunter? Ereignisgesteuerte Programmierung ist doch eigentlich alles was man mit PHP programmiert, oder etwa nicht? Zumindest für mich ist ein Pluginsystem auch etwas in der Art.
 
Ich hab mal an einem Script (war ein US-Paidmailer muss man anmerken) gearbeitet, da war das ganz einfach in Form von Klassen realisiert.
Jede Klasse hat dieselben Funktionen implementiert, die zu bestimmten Zeitpunkten vom Hauptscript aufgerufen wurden.

Für dein Beispiel vom Box-System hast du also ein Interface (kann man mit PHP ja auch machen)
PHP:
interface iBox
{
  public function output();
  /* gibt den HTML-Code der Box aus */

  public function setLanguage($langid);
  /* ich sag mal, das Script unterstützt verschiedene Sprachen
     mit dieser Methode sagst du der Box, welche Sprache sie
     benutzen soll */

  // ...
 }
. Die einzelnen Boxen implementieren das Interface dann:
PHP:
class TvBox implements iBox
{
  private $title = "TV-Programm";

  public function output()
  {
    echo $this->title;
  }

  public function setLanuage($langid)
  {
    if($langid==1)
      $this->title="tv-program";
    elseif($langid==2)
      $this->title="programe de là télevision"; // ich kann kein French ^^
  }
}
Im Hauptprogramm hast du dann eine Liste von installierten Boxen (z.B. in einem Verzeichnis alle Dateien mit Muster class_box_????.php) durchgehen und die Methode output() jeder Klasse aufrufen:
PHP:
$dir=opendir("./boxclasses");
while($file=readdir($dir))
{
  /* geht irgendwie einfacher mit dem Muster, aber ich bin faul
     und will nur das Prinzip aufzeigen ^^ */
  if(preg_match('/class_box_([a-z]+)\.php/',$file,$matches))
  {
    include_once($file);

    $classname=$matches[1];
    $box = new $classname;
    $box->setLanguage($global_langid);
    $box->output();
  }
}
closedir($dir);
 
Was verstehst Du darunter? Ereignisgesteuerte Programmierung ist doch eigentlich alles was man mit PHP programmiert, oder etwa nicht? Zumindest für mich ist ein Pluginsystem auch etwas in der Art.

masn definiert eine Reihe von Listenern die auf alles mögliche hören: onLoginComplete, onNewsPost, onAdminLogout, ...
nun kann man eben mit PHP immer diesen Status dispatchen und die listener die auf dieses Event hören, werden ausgeführt :arrow: ein Event-Dispatcher

theHacker, deine Möglichkeit erlaubt ja nur einzelne Seiten darzustellen, was ist nun aber zB wenn ich ein News-System geschrieben habe und ich nun ohne Code-Verändungen die Möglichkeit zum Kommentieren bieten will? Ganz ohne Veränderung weiß ich nicht wie es geht, aber mit dem Event-Dispatcher müsste ich bei der Darstellung der News nur das Event werfen und der/die zugehörige(n) Event-Listener würde seine Aufgabe erfüllen