vBulletin-Plugin-System vs. andere Plugin-Implementierungen

rellek

relativ sensationell
Teammitglied
Hawkes' schrieb:
Als Entwickler würde ich momentan nichts außer dem WBB 3 einsetzen (ich hab mich mit IPB 3 nicht beschäftigt. Das soll auch gut sein. Muss ich mir mal angucken). vB, phpBB 3 und Konsorten würde ich nicht verwenden wollen als Entwickler.
Also ich hatte den Eindruck, dass vBulletin recht angenehm ist für einen Entwickler. Das ist so ein bisschen wBB3 (mit den Plugins) und so ein bisschen wBB2 (mit selber rumdoktern). Mein krasses Auftrags-Addon hat beispielsweise keine einzige Zeile verändert im originalen vB3. Na gut, eine, im Template...Der Link zum Addon. :D
 
G

GameR

Guest
rellek' schrieb:
Also ich hatte den Eindruck, dass vBulletin recht angenehm ist für einen Entwickler. Das ist so ein bisschen wBB3 (mit den Plugins) und so ein bisschen wBB2 (mit selber rumdoktern). Mein krasses Auftrags-Addon hat beispielsweise keine einzige Zeile verändert im originalen vB3. Na gut, eine, im Template...Der Link zum Addon. :D
vBulletin ist so, naja das eine und das andere. Es kann richtig Spaß machen, aber die Suche nach Hooks ist manchmal echt nervig, auf der anderen Seite sind die Leute nicht verwundert, wenn sie mal was an den Quelltext-Datein machen müssen.
 

rellek

relativ sensationell
Teammitglied
Ist jetzt ganz schrecklich OT, aber:
GameR' schrieb:
aber die Suche nach Hooks ist manchmal echt nervig,
Nein, ists nicht. Denn dadurch arbeitet man (als Entwickler) mit dem Quellcode, was absolut nicht falsch ist - und statt da halt direkt was zu ändern, stolpert man über einen Hook und kann dann per Plugin ändern.

Blöd ist zugegebenermassen nur, wenn da wo man hinmöchte, kein Hook in der Nähe ist. Aber das kam (bei meinem Gebrauch) nocht nicht vor. Auch nicht bei Exoten wie SQL-Abfrage manipulieren für Suche nach Benutzer der Benutzerliste.
 
G

GameR

Guest
rellek' schrieb:
Nein, ists nicht. Denn dadurch arbeitet man (als Entwickler) mit dem Quellcode, was absolut nicht falsch ist - und statt da halt direkt was zu ändern, stolpert man über einen Hook und kann dann per Plugin ändern.

Blöd ist zugegebenermassen nur, wenn da wo man hinmöchte, kein Hook in der Nähe ist. Aber das kam (bei meinem Gebrauch) nocht nicht vor. Auch nicht bei Exoten wie SQL-Abfrage manipulieren für Suche nach Benutzer der Benutzerliste.
Ich sagte nicht das es schlecht ist, ich sagte, dass es nervig ist. Ich durch forste oftmals den vB-Code nach stellen wo Hooks sind, was ja gut ist, aber die Suche nach einer "optimalen" stelle ist manchmal sehr Zeit aufwendig. ;) Da ist das Event-System von WoltLab schon etwas angenehmer. Aber auch hier muss man wissen was an den stellen passiert.
 

rellek

relativ sensationell
Teammitglied
Ich merke schon dass wir einen eigenen Thread dafür brauchen. :D

Gut, mag am Entwickler liegen. Ich als alter wBB2-Hase habe das so ein bisschen im Blick wo etwas hin müsste. Deshalb suche ichs auch beim vB so wie in der guten alten Zeit. Und wenn ich eine SQL-Abfrage manipulieren möchte, dann suche ich die Abfrage. Der Dateiname sagt ja schon, welchen Bereich er abdeckt. Dort in der Nähe war bisher auch immer der entsprechende Hook.
 

Titus

Goldmember
hatten wir das nicht schon mal ? :D

IMO liegt durch die Events und die nicht vorhandene ACP-Schnittstelle beim wBB3 die Latte höher selbst etwas zu basteln, beim vB kann man auf ne Anfrage oder Idee mit ein wenig Google und kaum PHP-Kenntnissen einen Hack basteln
beim wBB scheitert es da wohl schon daran das man erst mal den zusammengestopselten Code so verpackt das er auch akzeptiert wird ^^
 

Hawkes

Member
Beim WBB kannst du einfach nicht stopseln ;) Du musst wohlüberlegt programmieren.

Was meinst du genau mit fehlender ACP Schnittstelle? Alle Events können durch den Parameter environment von user (Frontend) auf admin (ACP) umgepolt werden und greifen dann auch im ACP.
 

rellek

relativ sensationell
Teammitglied
Er meint, dass man beim vB im ACP die Plugins anlegt und sich Hooks aussucht und den Code dazu schreibt, während man beim wBB die Files selbst schreiben muss, XML-Files anlegt und das ganze einpackt.
 

Hawkes

Member
Hmm naja es gibt einen Ansatz von Plunts, aber das ist auch nicht so wirklich dasselbe. Im vB gibt es soweit ich weiß doch gar nicht so eine hohe Verknüpfungsdichte. Im WCF wird ja fast alles dynamisch generiert. Ich hatte mir vor 1 Monat mal bei jemandem angeguckt, wie eigentlich das vB das Renommeesystem umgesetzt habe und war überrascht wie verdammt hardcodet das Ganze ist.

"Hooks" sind ja auch nicht wirklich Events. Wenn ichs richtig verstehe sind noch am ehesten die Templateplatzhalter Hooks, aber dort ist eben nur Templatecode möglich.

Für diese Templatehooks wäre aber im WCF eine ACP Schnittstelle und auch ein geordneterer Zugriff wünschenswert. Momentan gefällts mir nicht so, dass jedes Paket dort wie es ihm gefällt seinen Code reinwerfen kann.
 

rellek

relativ sensationell
Teammitglied
Nein, Hooks sind im Quellcode vom vB drin und echte Stellen, an denen Quellcode stehen kann. Template-Hooks ist dasselbe, nur in Templates.

Im Quellcode sieht ein Hook z.B. so aus:
Code:
($hook = vBulletinHook::fetch_hook('global_setup_complete')) ? eval($hook) : false;

Im ACP kann man nun beispielsweise für den Hook "global_setup_complete" etwas PHP-Code schreiben, etwa wenn man eine PHP-Datei includen will. Und das wird dann einfach ausgeführt.
 

DodoMedia

Member
Hawkes' schrieb:
Hmm naja es gibt einen Ansatz von Plunts, aber das ist auch nicht so wirklich dasselbe. Im vB gibt es soweit ich weiß doch gar nicht so eine hohe Verknüpfungsdichte. Im WCF wird ja fast alles dynamisch generiert. Ich hatte mir vor 1 Monat mal bei jemandem angeguckt, wie eigentlich das vB das Renommeesystem umgesetzt habe und war überrascht wie verdammt hardcodet das Ganze ist.
Bei vBulletin sind die ganzen Funktionen direkt im Core drin, beim WBB 3 ist das alles modul/paket-basiert. Das kannst du nicht wirklich miteinander vergleichen.
 
G

GameR

Guest
Module im WBB sind wie die Funktionen im vB gelöst.

PHP:
if (MODULE_XYZ) {
    // modul code.
}

Die Pakete mit den Events sind schon etwas anders, aber beide System haben ihre Vor- und Nachteile, mich nervt es nur ab und an, dass man sich echt überlegen muss, an welchen Hooks ich was wie ein führe und man manchmal für mehre Hooks den selben Code schreiben muss, beim WBB kann ich durch die Events und die Vererbung manchmal da schon etwas Arbeit sparen.
 

rellek

relativ sensationell
Teammitglied
Man könnt sich ja in global_setup_complete (oder woanders) eine Datei includen, die Funktionen beinhaltet, die öfter mal gebraucht werden.

Dann ists in den Hooks nur noch ein funktionsname(); und der Aufwand wär mit dem der Events vergleichbar.
 
G

GameR

Guest
Hast du das Problem das du zu oft eventuell mit "global" arbeiten musst, und das ist nicht so das schöne. ;)
 

Hawkes

Member
Ich glaube hier prallen zwei verschiedene Ansätze der Softwareentwicklung (neudeutsch 2.0: Software Engineering) aufeinander.

Insofern ist die Diskussion an sich obsolet. Ich bin schon immer Objektorientierung gewöhnt, da ich mit Java begonnen habe zu programmieren. Insofern kann ich mich prozeduraler Programmierung nur schwer anfreunden.
 
G

GameR

Guest
Hawkes' schrieb:
Insofern ist die Diskussion an sich obsolet. Ich bin schon immer Objektorientierung gewöhnt, da ich mit Java begonnen habe zu programmieren. Insofern kann ich mich prozeduraler Programmierung nur schwer anfreunden.

Objektorientierung besthet aus prozeduraler Entwicklung, zumindest zum Teil. ;) Wirklich anders als Java, PHP, C++, D und wie sie alle heißen, ist eine funktionale Sprache, die imperativen Sprachen, zu denen PHP, Java usw. gehören sind schon alle sehr ähnlich.
 

Hawkes

Member
Es besteht daraus ist etwas anderes, als "es ist ausschließlich". Diese Korinthenkackerunterscheidungen sind mir auch schon in den ersten Vorlesungen auf den Keks gegangen.

Fakt ist, dass es zwei ganz unterschiedliche Ansätze sind. Allein von der Denkweise, die der Programmierer annehmen muss.

Ich mag Objektorientierung deswegen lieber, weil es eine deutlich authentischere Abbildung realer Prozesse auf die virtuelle Welt ermöglicht und das ist ja auch gerade das, was OOP ausmacht.
 
G

GameR

Guest
Imperative Sprachen haben sich entwickelt, von prozeduraler Entwicklung hin zu OOP und jetzt AOP. Wirklich anders sind OOP-Sprachen aber auch nicht. Das hat nichts mit Korinthenkackerunterscheidung zu tun Hawkes, es sind Tatsachen. Zudem sind OOP Sprachen auch nicht für alles geeignet und der kleinste gemeinsame Nenner der imperativen Sprachen ist eben nun mal prozeduraler Code, wie du es jetzt verpackst, ist ein anderes Ding.

Deswegen unterscheidet man auch wenn man nach Programmiersprachen geht, erst mal zwischen Imperativ und Funktional, nur das OOP und AOP bei den imperativen Sprachen das aktuell höchste Glied in der Nahrungskette ist. Assembler ist ja auch erst mal bedingt imperativ und prozedural, bis du die Blöcke nutzt, damit fängt es ja bei imperativen Sprachen an und die Kapselung hin bis zu den heutigen Klassen hat sich entwickelt. Genau so wie man auch damals bereits mit den Funktionalensprachen angefangen hat.

Und du sprichst hier von 2 Welten, aber das ist nicht OOP und Prozedural, sondern erst mal Imperativ und Funktional, was du dann bei den imperativen Sprachen für eine Sprache und welche Ausbaustufe sie hat, wählst ist auch wieder entscheidend. Wenn wir in der Uni jetzt Projekte anfangen, stellt sich für uns erst die Frage: Funktional oder Imperativ und danach dann erst weitere Konzeptfragen.

Kurzes Beispiel:

Code:
class DijkstraIF {
	protected int a = 5
	public void test() {
		if (a >= 5) return true;
		if (a <= 5) return false;
	}
}
Wird immer true zurück geben, es läuft von oben nach unten in der Methode. Bei einer Funktionalensprache gibt es hier aber ein Unterschied.
Code:
FUN dijkstraIF : nat -> bool

DEF dijkstraIF(x) ==
	IF x >= 5 THEN true
	IF x <= 5 THEN false
	FI
Viele Leute die mit Java arbeiten denken jetzt sofort, ja es kommt true zurück, das ist aber so nicht, in einer funktionalen Sprache entscheidet hier eher der Zufall. Mal kommt true, mal false zurück wenn man der Funktion den Wert 5 übergibt.

Ach ja, bis zur ersten Vorlesung der Funktionalensprachen wusste ich das aber auch nicht. ;)
 
Oben