Plugin Bootstrap.php: Eigene LESS / JS Dateien hinzufügen

Hallo! Ich füge mit Hilfe von $this-\>subscribeEvent( 'Theme\_Compiler\_Collect\_Plugin\_Less', 'addLessFiles' ); $this-\>subscribeEvent( 'Theme\_Compiler\_Collect\_Plugin\_Javascript', 'addJsFiles' ); public function addLessFiles(Enlight\_Event\_EventArgs $args) { $less = new \Shopware\Components\Theme\LessDefinition( array(), array( \_\_DIR\_\_ . '/Views/frontend/plugins/plugin\_name/\_public/src/less/all.less' ), \_\_DIR\_\_ ); return new Doctrine\Common\Collections\ArrayCollection(array($less)); } public function addJsFiles(Enlight\_Event\_EventArgs $args) { $jsFiles = array(\_\_DIR\_\_ . '/Views/frontend/plugins/plugin\_name/\_public/src/js/script.js'); return new Doctrine\Common\Collections\ArrayCollection($jsFiles); } erfolgreich LESS/JS-Dateien innerhalb meines Plugins hinzu. Nun möchte ich jedoch _nur_ auf bestimmten Shopseiten (beispielsweise auf Shopseiten mit einer bestimmten ID oder Template-Variablen) die LESS/JS-Dateien hinzufügen. Wie erledige ich das am besten? Eine View o.Ä. kann man ja über die $args (mit Hilfe von $view = $args->getSubject()->view():wink: nicht bekommen. Vielen Dank! R

Es wird pro Shop jeweils -eine- .css und eine .js generiert. Hier wirst du mit Selektoren arbeiten müssen. Viele Grüße

Das ist eine klare Antwort. Danke, das hat mir sehr weitergeholfen!

Hallo \_\_DIR\_\_ . '/Views/frontend/plugins/plugin\_name/\_public/src/less/all.less' wo genau muss man die all.less reinpacken? erstelle ich diese Ordnerstruktur in meinem plugin_name/Views-Ornder?

Ganz genau!

Also ich habe folgende Ordnerstruktur shopware\engine\Shopware\Plugins\Community\Backend\MEINPLUGIN\Views\frontend\plugins\MEINPLUGIN_public\src\less\all.less aber die in der all.less definierten Styles sind einfach nicht da? :frowning:

Die less sieht z.B. so aus: @import "\_modules/style"; Dann legst Du im Ordner “less” einen Unterordner “_modules” an, in der Du die Datei “style.less” packst: body { ... }

Habe ich gemacht, leider ohne Auswirkung :confused:

Mein Pfad sieht so aus: \engine\Shopware\Plugins\Local\Frontend\plugin_name\Views\frontend\plugins\plugin_name_public\src\less\all.less Eventuell hat es was mit Local\Frontend zu tun?

also wenn ich der Beispiel-Bootstrap folge, landet mein Plugin automatisch in [i]engine\Shopware\Plugins\Community[/i] wie bewerkstellige ich es, daß es im [i]engine\Shopware\Plugins\Local[/i] landet?

Hmm, ich lege das Plugin einfach hinein und installiere es danach über das Backend.

So, meine less-Datei wurde zwar eingebunden, jedoch muss das genze noch kompiliert werden. Wie triggert man denn den Compiler an?

Im Backend: Einstellungen > Caches / Performance > Cache > Alle auswählen > Leeren > Themes kompilieren.

das müsste ja über das Plugin irgendwie angetriggert werden, d.h. wenn ich das Plugin installiere, collected der meine less-datei und triggert das kompilieren an, damit das auch im frontend sichtbar ist.

 public function install() { $this-\>registerEvents(); return array('success' =\> true, 'invalidateCache' =\> array('frontend')); } 
1 „Gefällt mir“

Danke für die fixe Antwort, jedoch löscht er dabei nur den Cache.

Du suchst ‘invalidateCache’ => array(‘theme’) Viele Grüße

1 „Gefällt mir“

Sauber :slight_smile: genau das habe ich gesucht :thumbup:

Habe noch ein mir sehr rätselhaftes Verhalten in SW. Der Tip mit 'invalidateCache' =\> array('theme') ist richtig, denn jetzt fragt der PluginManager beim installieren des Plugins, ob er das Theme kompilieren soll und leert auch den Cache. Doch weiterhin ohne Auswirkung auf das Frontend :cry: Wenn ich im ThemeManager->Einstellungen das Compiler-Caching deaktiviere, werden die Styles korrekt übernommen bzw. dargestellt. Woran kann das liegen? Habe ich hier etwas gundlegendes übersehen?

@Flaki schrieb:

Habe noch ein mir sehr rätselhaftes Verhalten in SW.
Der Tip mit

‚invalidateCache‘ => array(‚theme‘)

ist richtig, denn jetzt fragt der PluginManager beim installieren des Plugins, ob er das Theme kompilieren soll und leert auch den Cache. Doch weiterhin ohne Auswirkung auf das Frontend :cry:

Wenn ich im ThemeManager->Einstellungen das Compiler-Caching deaktiviere, werden die Styles korrekt übernommen bzw. dargestellt. Woran kann das liegen? Habe ich hier etwas gundlegendes übersehen?

Ich stehe momentan gerade beim selben Problem. Hat jeman eine Lösung dazu?

Als Info, falls jemand fragt.
Zusätzlich habe ich bei der Less-Angabe meine Konfigurationen mitgegeben, welches hier im ersten array ist.

public function addLessFiles(Enlight_Event_EventArgs $args) {
   $less = new \Shopware\Components\Theme\LessDefinition(
      array('meinLessElement' => $this->Config()->get('meinFormElement')),
      array(
         __DIR__. '/Views/frontend/plugins/plugin_name/_public/src/less/all.less'
      ),
      __DIR__
   );
   return new Doctrine\Common\Collections\ArrayCollection(array($less));
}

Diese kann in meiner Less-Datei via @meinLessElement abrufen.