Antworten auf deine Fragen:
Neues Thema erstellen

AddonSystem

Robbyn-

PHP / Flex Programmierer

Hy ich hätte da mal eine bescheidene bitte.
Die meißten kennen doch das Addon System von vBulletin, wo man einfach nur das Addon hochladen braucht und es installiert sich von alleine.
Meine frage ist jetzt nicht wie sie dies machen, sondern wie kann z.b. sagen: "Ja füge diese Variable unter folgenden Code ein!"
Also das es nicht an eine beliebige stelle geschmissen wird, sondern der Code an die stellen platziert wird, die vordefiniert sind?

MfG.Robbyn
 

Duddle

Posting-Frequenz: 14µHz

AW: AddonSystem

Ich bezweifle, dass PlugIns Code direkt verändern. Ich vermute, das jeweilige System wird bestimmte Schnittstellen anbieten (die die interne Datenstruktur verändern) und diese werden von den PlugIns angesprochen. Dann müsste das System nur eine Liste der installierten PlugIns führen und bei jeder relevanten Operation diese Liste abarbeiten.


Duddle
 

Robbyn-

PHP / Flex Programmierer

AW: AddonSystem

Also das der Code bereits im Basis Script enthalten ist und durch das Plugin nur noch aktiviert wird? Verstehe ich das richtig oder eher falsch o_O?

MfG.Robbyn
 

ChrisvA

Aktives Mitglied

AW: AddonSystem

Ne, ich denke schon, dass der komplette Code vom Plugin kommt. Unter umständen könnte ich mir jedoch vorstellen, dass einfach eine gewisse Datei vom Plugin-Code einfach direkt eingebunden wird.
Welcher Plugin-Code das ist, steht vermutlich in einer Datei, die bei der Installation ausgelesen wird.
Bestimmte Schnittstellen werde jedoch schon vom Basiscode vorgegeben sein, z.B. eine Datenbaknklasse, die man mit der globalen Variable $g_sql

Falls es dich interessiert, dann schau dir doch einfach mal ein solches Plugin an, das ist ja der Vorteil von PHP, dass man den Quellcode einfach lesen kann.
Ich vermute einfach mal, dass es irgendwelche Installationsskripte im Plugin gibt. Das können XML-Datein, die geparst werden, PHP-Skripte, die ausgeführt werden, oder auch sql-Skripte, die Datenbankeinträge machen und damit das System umprogrammieren.
Poste doch vielleicht einfach mal den Link zu eine Beispielplugin. (Ich weiß, das könnte ich auch selber machen, aber dann beziehen wir und immer auf das gleiche und du hast ja gefragt)
 

Duddle

Posting-Frequenz: 14µHz

AW: AddonSystem

Wie angedeutet, für ein Websystem kenne ich noch keine konkreten Schemen zur Erweiterung der Funktionalität. Ich kann aus der OOP ein Beispiel skizzieren, dass dir den Ansatz verständlich machen kann.

Nehmen wir als Klasse ein Dokument, wie das intern dargestellt wird ist egal. Diese Klasse hat beispielsweise eine Methode namens getTitle(). Beim Ausgeben des Dokumentes wird an den richtigen Stellen diese Methode aufgerufen, das sollte kein Problem darstellen.
Willst du nun dein Dokument erweitern, beispielsweise soll jeder Titel fett dargestellt werden, könntest du entweder eine Kindklasse DokumentFetterTitel bilden - aber du siehst schnell wie aufgebläht so ein System wird - oder die bisherige Klasse erweitern.

Falls du schon mal mit Klassen gearbeitet hast, sollte dir Vererbung ja bekannt sein. Sagen wir, es gibt eine Kindklasse von Dokument, die für eine Familie von Verschönerungen im Dokument stehen soll, und nennen wir sie Dekorierer. Da Dekorierer von Dokument erbt, bietet es die gleichen Methoden (sie oben) an. Es ist also einem Klienten (jemand, der Dokument nutzen will) gleichgültig, ob er mit Dokument oder Dekorierer redet (genauer: er weiß es i.d.R. garnicht).

Zeit für etwas Code, ich skizziere Dokument und Dekorierer (Pseudo-Syntax, hab lange kein PHP-OOP mehr geschrieben):
PHP:
class Dokument {
...
   $title = "Mein Titel";
   getTitle() {
     return $title;
   }
...
}
abstract class Dekorierer extends Dokument {
   Dokument $dok = null; //hält eine Referenz auf das dekorierte Dokument

   Dekorierer(Dokument $dokument) { //Konstruktor
      $dok = $dokument;
   }
...
}

Bis jetzt ist noch nichts wirklich magisches passiert. Dekorierer ist abstrakt, weil davon keine Instanzen erzeugt werden sollen. Jetzt möchte ich, dass ein Dekorierer den Titel fett macht. Erzeugen wir eine Kindklasse FettDekorierer von Dekorierer:
PHP:
class FettDekorierer extends Dekorierer {
...
   getTitle() {
      $oldTitle = $dok.getTitle(); //hole den Titel vom dekorierten Dokument
      $newTitle = "<strong>".$oldTitle."</strong>"; //oder ein internes Markup-System nutzen, etc.
      return $newTitle;
   }
...
}

Wir können also sowas machen:
PHP:
$myDoc = new Dokument( ... ); //Titel im Konstruktor setzen, usw.
$decoratedDoc = new FettDekorierer($myDoc);
echo $decoratedDoc.getTitle(); //gibt <strong>.....</strong> aus

Warum ist dieses System besser als bspw. die Vererbung nach DokumentFetterTitel? Weil es sehr viel flexibler ist. Sobald du noch mehr Zeug erweitern willst, kommst du mit reiner Vererbung nicht weit (DokumentFetterKursiverTitel, DokumentKursiverUnterstrichenerTitel, ...). Du kannst aber beliebig Dekorierer-Unterklassen erzeugen und sie miteinander kombinieren:

PHP:
$myDoc = new Dokument( ... ); //Titel im Konstruktor setzen, usw.
$decoratedDoc = new KursivDekorierer(new UnterstrichenDekorierer(new FettDekorierer($myDoc)));
echo $decoratedDoc.getTitle(); //gibt den entsprechend formatierten Titel aus

Dieses Prinzip ist nur eines von vielen, um die Funktionalität deiner Objekte zu erweitern.

Wie anfangs gesagt, ich weiß nicht wie webbasierte Systeme es machen, aber es folgt sicher ähnlichen Ideen.


Duddle
 

ChrisvA

Aktives Mitglied

AW: AddonSystem

Da ich auf Anhieb kein Plugin für vBulletin gefunden habe, habe ich mir einfach mal eines für Joomla rausgesucht:

Bei diesem Plugin gibt es eine xml-Datei, die mit folgender Zeile anfängt:
Code:
<install version="1.5" type="plugin" group="content">
Das und auch der Rest der Datei lässt darauf schließen, dass scheinbar das xml-Skript die Informationen enthält, die zum installieren nötig sind.
Bei der Idee mit der Vererbung sehe ich das Problem, sobald 2 Plugins die selbe Klasse verändern wollen.

Ich würde ein solches Plugin-System so aufbauen, dass es eine Art-Pipeline für alles Mögliche (wie die Transformationspipeline von DirectX) gibt, dieser Pipeline kann man nun Elemente hinzufügen. Dabei ist genau feste gelegt, wie die Daten reingehen und wie sie raus gehen. Was dazwischen passiert darf das Plugin dann selbst bestimmen.

Edit: In Joomla scheint es eine eigene Plugin Klasse zu geben, von der das ausgewählte Plugin zumindest erbt.
 
Zuletzt bearbeitet:

Robbyn-

PHP / Flex Programmierer

AW: AddonSystem

Ich habe es mir nun überlegt wie folgt zu machen: (im groben)

PHP:
$datei		=	file_get_contents("script.php");
$suchen		=	"ini";
$ersetzen	=	"ini_set";

$datei = ereg_replace($suchen,$ersetzen,$datei);
fclose(fopen( 'script.php', 'w+'));
$handler = fopen("script.php","a+");
fwrite($handler , $datei);
fclose($handler);

es muss einfach nur wie du bereits sagtest eine Klasse oder funktionen existieren wo die befehle dazu drin stehen und fertig.

MfG.Robbyn
 

ChrisvA

Aktives Mitglied

AW: AddonSystem

Ich habe es mir nun überlegt wie folgt zu machen: (im groben)

PHP:
$datei        =    file_get_contents("script.php");
$suchen        =    "ini";
$ersetzen    =    "ini_set";

$datei = ereg_replace($suchen,$ersetzen,$datei);
fclose(fopen( 'script.php', 'w+'));
$handler = fopen("script.php","a+");
fwrite($handler , $datei);
fclose($handler);
es muss einfach nur wie du bereits sagtest eine Klasse oder funktionen existieren wo die befehle dazu drin stehen und fertig.

MfG.Robbyn

Also so richtig verstehe ich das ja jetzt noch nicht. Willst du mit dem Plugin nur die PHP-Ini ändern, oder warum verwandelst du ini in ini_set.

Außerdem würde ich mich mal mit Dateioperatoren auseinandersetzten. Das 3malige öffnen kann man auch mit einem einzigen öffnen machen.
Schaue mal nach r+ bei fopen.
 

saila

Moderatorle

AW: AddonSystem

Hi,

das VBB hat das Addon-Paket immer mit dabei im Grundscript. Es wird lediglich über das Admin-Panel geöffnet oder bleibt eben verborgen. Ist es geöffnet, wird im Kontrollzentrum der Link auf der linken Seite angezeigt und bei klick auch die entsprechende Seite, um das Bild hochladen zu können bzw. eine Auswahl von vorhandenen Adds zu treffen.

Ist im Grunde auch kein Akt, da es eine Erweiterungsklasse zur Admin/User-Klasse darstellt. In dieser Klasse ist alles erforderliche an Methoden vorhanden.

So zumindest Version 2 - 3.x. Was - sofern veröffentlicht - das neue VBB an Veränderungen hat, müsste man nachsehen.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben