PHP Ein kleines Addon System

  • Ich habe vor ein kleines Addon System zu coden und habe es auch bereits.
    Jedoch ist die Variante die ich nutze mir persöhnlich nicht am Besten, jedoch fällt mir
    keine bessere Variante ein.


    Ich nutze einen Autoloader, der lädt die Klasse und erstellt das Objekt für die Hauptklasse der Addons, wo alle Addons
    geladen werden sollen.
    Die sieht so aus:


    Im Verzeichnis system/addons befinden sich dann die Addons.
    Ein Beispiel Addon:


    Die HelloWorld Klasse (also das Addon) ist ja schön und gut, nur wie könnte ich die Hauptklasse worin die Addons geladen werden schöner gestalten?

    Für das Moderationsteam:
    Ich nutze offene WLAN's und bin im Intercafe oder im Hotel. (Vor Ban wegen Multiaccount deswegen bitte eine private Nachricht, um dies zu klären).

  • Das Problem was ich sehe ist, wie willst du denn wieder auf die Helloworld Klasse zugreifen?


    Wozu zugreifen? Das Addon System ist eher für mich gedacht. Wenn ich bspw. ein Addon habe was die Login loggt. Der Nutzer des Content Management Systems hat dann mehr Übersicht und findet das Addon schneller als irgendwelche Klassen durchzusuchen. Wenn ich es als Addon schreibe ist es schneller zu finden und direkt deaktivierbar. Auch andere Nutzer könnten ihre eigenen Addons so nebenbei noch schreiben aber mein Vorhaben ist nicht ein Addon System zu schreiben, dass alles ermöglicht wie in WBB.

    Für das Moderationsteam:
    Ich nutze offene WLAN's und bin im Intercafe oder im Hotel. (Vor Ban wegen Multiaccount deswegen bitte eine private Nachricht, um dies zu klären).

  • Ich glaube eher das er meint wie du später, wenn die Addons geladen sind du auf eine Funktion in dem Addon zugreifen willst.

    Garnicht. Die Addons sollen ja auf die bereits vorhandenen Funktionen zugreifen und nicht die eigentlichen Klassen auf das Addon.
    Beispielsweiße könnte ich im Constructor Funktionen wie

    PHP
    addMenuCategory()


    einfügen. Dafür müsste ich in der Hauptklasse (class.addon.php) zwar noch etwas tun, aber das ist ja nicht das Hauptproblem.
    Mir gehts darum die Addons überhaupt zu laden, was ja auch funktioniert nur mir gefällt meine jetzige Variante nicht.


    Edit:
    Jetzt verstehe ich auch was er meint.
    Zugreifen würde ich darauf so:

    PHP
    $helloworld = new \system\addons\helloworld\Helloworld();


    Die Funktionen die ein Addon nutzen kann werden sich in der Hauptklasse befinden und um diese dann aufzurufen nutze ich für die Klasse extends Addon.

    PHP
    class Helloworld extends Addon


    Edit:
    Also von den Hauptklassen würde ich so auf ein Addon zugreifen:

    PHP
    use \system\classes\addon\Addon as Addon;
    	$Addon = new Addon();
    
    	use \system\addons\helloworld\Helloworld as Helloworld;
    	if($Addon->addonExists("\system\addons\helloworld\Helloworld")) {
    		$Helloworld = new Helloworld();
    		$Helloworld->log("Hello World!");
    	}


    Um zu prüfen ob das Addon was für die Funktion bzw. Klasse benötigt wird, habe ich ein Array wo die Addons beim Laden hinzugefügt werden.
    Dazu dann diese Funktion

    PHP
    public function addonExists($addon) {
    			if(isset($this->_addons[$addon])) return true;
    			return false;
    		}


    Dann hätte ich ein Addon System womit ich auch viel anfangen kann.
    Die Frage ist halt nun, wie ich die Addons am Besten laden.

    Für das Moderationsteam:
    Ich nutze offene WLAN's und bin im Intercafe oder im Hotel. (Vor Ban wegen Multiaccount deswegen bitte eine private Nachricht, um dies zu klären).

    3 Mal editiert, zuletzt von Allinone ()

  • mir persönlich kommt es sowieso spanisch vor das dass funktioniert!


    du sagst im constructor new Addon() was den ganzen ablauft wiederholt immer und immerwieder


    das ist doch ne volle dauerschleife

  • mir persönlich kommt es sowieso spanisch vor das dass funktioniert!


    du sagst im constructor new Addon() was den ganzen ablauft wiederholt immer und immerwieder


    das ist doch ne volle dauerschleife

    Der Constructor wird nur einmal ausgeführt.
    // Außerdem nicht

    PHP
    new Addon();


    sondern

    PHP
    new $addon();


    Somit wird nicht die Hauptklasse sondern das Objekt für jedes Addon selbst erstellt.

    Für das Moderationsteam:
    Ich nutze offene WLAN's und bin im Intercafe oder im Hotel. (Vor Ban wegen Multiaccount deswegen bitte eine private Nachricht, um dies zu klären).

  • ohh man wer lesen kann ist klar im vorteil


    ignoriert einfach meine nachricht :D