Namespaces für Plugins

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Namespaces für Plugins

Beitrag von rethus » Mi 2. Apr 2014, 13:51

Ich stelle gerade fest, dass sich zwei Plugins nicht miteinander vertragen.

In dem ersten Plugin habe ich unter anderen folgende Variablen Deklariert und Definiert:

Code: Alles auswählen

// Template
$plugin_name 	= "xst_contactTeaser_pro";
$tplName 		= "standard";	// define Template-Folder
$tplPath		= cRegistry::getBackendUrl().$cfg['path']['plugins'].$plugin_name."/templates/".$tplName;
In einem anderen Plugin bin ich ähnlich vorgegangen:

Code: Alles auswählen

// Template
$plugin_name 	= "xst_contactTeaser_pro_jobs";
$tplName 		= "standard";	// define Template-Folder
$tplPath		= cRegistry::getBackendUrl().$cfg['path']['plugins'].$plugin_name."/templates/".$tplName;
Nun verhält sich Contenido so, dass das Plugin, welches zuletzt in der Reihenfolge (A-Z) geladen wird, auch die variablenbestückungen bestimmt.
Klar kann man hier mit einem Array arbeiten, den sich an den Plugin-Namen anlehnt.
Aber nur mal so aus Interesse: Gibt es da noch andere Abgrenzungsmöglichkeiten, damit Variablen die in einem Plugin definiert und genutzt werden auch in diesem Scope bleiben?

Sonst steigt ja mit wachsender Anzahl und Komplexität der Plugins die Wahrscheinlichkeit, dass sich unangenehme Nebeneffekte mit anderen Programmbestandteilen ergeben.

Habe es für meinen Fall erst mal so gelöst, dass ich einen Array $plugin['pluginName'] nun als Pluginspezifischen Datenspeicher nutze.

Code: Alles auswählen

// Template
$plugin['xst_contactTeaser_pro']['tplName'] = "standard";	// define Template-Folder
$plugin['xst_contactTeaser_pro']['tplPath']  = cRegistry::getBackendUrl().$cfg['path']['plugins']."xst_contactTeaser_pro/templates/".$plugin[$plugin_name]['tplName'];

Sollte dies in Zukunft die favorisierte Lösung sein, wäre es gut, wenn dies in die Doku für den Bereich https://docs.contenido.org/display/CONDEVE/Plugin%20 aufgenommen würde.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: Namespaces für Plugins

Beitrag von frederic.schneider_4fb » Do 10. Apr 2014, 08:25

Guten Morgen,

um ehrlich zu sein habe ich noch nicht ganz verstanden, worauf Du hinaus willst. Kannst Du es noch einmal detailliert erläutern was Du mit Namespaces für Plugins konkret meinst?
Frederic Schneider
Entwickler bei der four for business AG

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Namespaces für Plugins

Beitrag von rethus » Mo 28. Jul 2014, 15:18

Vielleicht nochmal mit nem Kollegen drüber schauen, denke das es recht detailliert beschrieben ist. Wüsste nicht wie ich es anders erklären sollte.
Wenn du konkrete Fragen hast, einfach hier stellen.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

mischa.holz
Beiträge: 86
Registriert: Do 28. Jun 2012, 15:30
Wohnort: Darmstadt
Kontaktdaten:

Re: Namespaces für Plugins

Beitrag von mischa.holz » Mi 30. Jul 2014, 12:11

PHP hat namespaces eingebaut. Du kannst deine Plugins also einfach in einen eigenen Namespace tun und es sollte keine Kollisionen mehr geben.

Beachte jedoch, dass der CONTENIDO Core (noch) keine Namespaces verwendet, was bedeutet, dass alle Klassen und Funktionen im globalen Namespace sind.
Außerdem können Variablen nicht in einem Namespace sein (Konstanten funktionieren jedoch).
CONTENIDO Doku - API Doku - Git Repo - Bug Tracker - CONTENIDO 4.9.4!!
Arbeitet nicht mehr bei 4fb

mattmarr
Beiträge: 361
Registriert: Mo 3. Aug 2009, 14:11
Kontaktdaten:

Re: Namespaces für Plugins

Beitrag von mattmarr » Mo 27. Apr 2015, 09:58

Hi!

Ich stosse das Theman nochmal an.
Hab derzeit auch das Problem das ich Namespaces in den Modulen nutzen muss.
Leider scheint es Contenido Version 4.8.20 noch immer nicht zu unterstützen.
Es kommt immer die Fehlermeldung "Parse error: syntax error, unexpected 'use' (T_USE) in...".

Gibt es dazu Infos ob und wann man das auch nutzen kann?



Gruß
Matthias

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Namespaces für Plugins

Beitrag von Faar » Mo 27. Apr 2015, 10:34

Da hat sich schon vor Jahren einer Gedanken gemacht: http://www.contenido-wiki.org/wiki/inde ... ntwicklung
Allerdings dort betreffend der IDs.
Unterscheidung: Mit Namespace ist hier nicht derjenige der objektorientierten Klassen gemeint: http://de.wikipedia.org/wiki/Namensraum

Die Problematik der Variablen-Namen wird in Wordpress so gelöst, dass jeder einen individuellen Namen für das Plugin auszusuchen hat und dann den Plugin-Namen als Präfix für die Variablen-Namen nützen soll.
Das soll (und tut es meistens) Kollisionen vermeiden.
Und der Ansatz von Rethus geht auch in diese Richtung, jedoch in Form eines Arrays, was aber durchaus typisch für Contenido-Schreibweise wäre.
Es sieht jedoch (für nicht Array-Affine Programmierer) manchmal monströs, unübersichtlich und verwirrend aus, die Array-Schreibweise.

Was ist nun besser?
Wordpress: xst_contactTeaser_pro_tplName_standard
Contenido: $plugin['xst_contactTeaser_pro']['tplName']
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Antworten