ich habe zwei Plugins, die das gleiche JavaScript bzw. jQuery benötigen (jquery-ui-…js). Wie kann ich das einbinden, dass zum einen die Plugins „autark“ sind, also in jedem Plugin einzeln eingebunden werden, sie aber nicht doppelt eingebunden werden. Das gleiche gilt auch für eigene JavaScript-Programme, die man in mehreren Plugins benötigt.
also ich denke die einfache Lösung wäre es, die JavaScript Dateien in einem eigenen Theme einzubinden. Also am besten die Business Logik von jQuery extrahieren und dann in der Plugin View nur noch die jQuery Aufrufe machen und an die jeweiligen JavaScript Klassen weitergeben.
Oder wenn es nicht unbedingt jQuery sein muss, dann ist eigentlich Angular 1 oder 2 genau für dieses Vorhaben gemacht. Denn dort kann man Module per Dependency Injection einbinden, also eine gemeinsame geteilte Code Basis, wenn man so will. Im Angular 2 Slang wären das dann also Services oder Provider, die man in die Direktiven injected.
Dann kannst du das ja direkt beim Install prüfen. Wenn das Plugin dann schon da ist, dann registriert er das Event ja erst garnicht im Plugin. Bin selbst kein Programmierer, aber so würde ich das probieren.
Danke, das ist eine Möglichkeit, zumindest solange es sich um eigene Plugins handelt. Wie könnte die if-Bedingung denn aussehen ?
Und wenn das andere Plugin dann deinstalliert wird ? Was dann ?
Ist sicherlich nicht die beste Lösung. Du könntest ja über die Datenbank abfragen ob das Plugin installiert ist:
$sql = "SELECT installation_date FROM s_core_plugins WHERE name LIKE '%swag%'";
$result = Shopware()->Db()->fetchAll($sql);
Danach kannst du mit dem $result ja weiterarbeiten und deine If-Bedingung aufbauen. Bei Deinstallation müsste man dann drauf hinweisen, dass das jeweils andere Plugin über „reinstall“ nochmal initialisiert werden muss.
Ich glaube das geht bestimmt noch eleganter - war jetzt nur meine spontane Idee.
ok, mit Datenbankabfrage… Danke. Das Problem mit der Deinstallation des anderen Plugins kann man so lösen, dass man nicht das ganze Event in die if-Abfrage steckt, sondern nur das Einbinden selbst. Dann wird es beim nächsten Themeaufbau wieder eingebunden. Schön ist allerdings anders
jQuery.fn.jquery
Es geht ja nicht um jQuery selbst, sondern um jQuery Zusatzbibliotheken, wie jQuery-ui. Kann man das evtl. auch abfragen ? Am besten in php.
Hat denn bisher noch niemand dieses Problem gehabt ? Bzw. bindet ihr in eure Plugins jQuery oder auch JS-Bibliotheken einfach ein, ohne darauf zu acheten, ob ein anderes Plugin (nicht unbedingt ein eigenes) das auch schon eingebunden hat ?