Less Files im Plugin einbinden / neues Plugin System

Viele Wege führen nach Rom:

use Doctrine\Common\Collections\ArrayCollection;

class Shopware_Plugins_Frontend_TEST_Bootstrap extends Shopware_Components_Plugin_Bootstrap {


  private function registerEvents() {
    $this->subscribeEvent(
      'Theme_Compiler_Collect_Plugin_Less',
      'addLessFiles'
    );
  }


  // zusätzliches CSS bzw. LESS einbinden
  public function addLessFiles(Enlight_Event_EventArgs $args) {
    $less = new \Shopware\Components\Theme\LessDefinition( 
      array(),
      array( __DIR__. '/Views/_resources/less/all.less' ),
      __DIR__
    );
    return new Doctrine\Common\Collections\ArrayCollection(array($less));
  }


}

 

Genau so hab ichs früher immer gemacht, ganz ohne Subscriber… Jetzt halt mit Subscriber. Ist natürlich geringfügig schöner.

Für was ist denn eigentlich die Services XML konkret?
 

@R4M schrieb:

Viele Wege führen nach Rom:

use Doctrine\Common\Collections\ArrayCollection;

class Shopware_Plugins_Frontend_TEST_Bootstrap extends Shopware_Components_Plugin_Bootstrap {

private function registerEvents() {
$this->subscribeEvent(
‚Theme_Compiler_Collect_Plugin_Less‘,
‚addLessFiles‘
);
}

// zusätzliches CSS bzw. LESS einbinden
public function addLessFiles(Enlight_Event_EventArgs $args) {
$less = new \Shopware\Components\Theme\LessDefinition(
array(),
array( DIR. ‚/Views/_resources/less/all.less‘ ),
DIR
);
return new Doctrine\Common\Collections\ArrayCollection(array($less));
}

}

 

Hallo,

dir ist aber schon bewusst, das wir hier vom neuen Pluginsystem reden und nicht vom alten, oder? Hast du dir überhaupt einen einzigen Beitrag oder wenigstens die Überschrift durchgelesen *kopfschüttel*? Vorallem steht der Code bereits im ersten Beitrag so drin… Manche Leute…

Die service.xml ist für die Services - siehe Entwicklerhandbuch oder https://developers.shopware.com/developers-guide/plugin-system/#container-configuration.

Beste Grüße

Sebastian

Ich bezog mich auf den Eingangspost und auf die Frage "Die Theme Kompilierung schlägt aber fehl… Hat jemand ne Idee, weshalb das nicht mehr so funktioniert? ". Mein Beispiel bezieht sich auf die neuen Pluginsysteme und ist in aktuellen SW-Version ohne Probleme lauffähig.

@R4M schrieb:

Ich bezog mich auf den Eingangspost und auf die Frage "Die Theme Kompilierung schlägt aber fehl… Hat jemand ne Idee, weshalb das nicht mehr so funktioniert? ". Mein Beispiel bezieht sich auf die neuen Pluginsysteme und ist in aktuellen SW-Version ohne Probleme lauffähig.

Hallo,

dir ist aber schon bewusst, dass man beim neuen Pluginsystem nicht mehr von Shopware_Components_Plugin_Bootstrap ableitet oder ( https://developers.shopware.com/developers-guide/plugin-system/#container-configuration )? Das dein Beispiel nicht das neue Pluginsystem ist oder sich darauf bezieht, sieht man ja alleine schon am Pfad der Bootstrap - Datei (im neuen Pluginsystem gibt es kein Frontend, Backend etc im Pfad mehr, etc). Und hier geht es ausschließlich um das neue Pluginsystem.

Dass das von dir erwähnte alte Pluginsystem noch unter den aktuellen Shopware-Versionen funktioniert, ist jedem klar - aber überhaupt nicht Thema dieses Beitrags.

Beste Grüße

Sebastian

Ok, wir kommen hier so nicht weiter und es führt leider zu nichts.

Ja, diese Plugins, zum Beispiel PayPal, Connect etc. basieren auch noch auf dem alten System.

Hallo Leutz,

ich stand gerade vor dem gleichen Problem. Bei funktionierts wie folg t:

public static function getSubscribedEvents()
{
    return [
        'Theme_Compiler_Collect_Plugin_Less' => 'addLessFiles'
    ];
}

public function addLessFiles(\Enlight_Event_EventArgs $args)
{

    $less = new \Shopware\Components\Theme\LessDefinition([], [__DIR__. '/Resources/views/frontend/_public/src/less/all.less']);
    return new \Doctrine\Common\Collections\ArrayCollection([$less]);

}

 

Ich hatte die Frage weiter oben schon wie folgt beantwortet und gelöst.

So, das war jetzt ne schwere Geburt… Ich habs jetzt und sogar dort in dem Pfad, wo ichs ursprünglich haben wollte. Ganz ohne _public etc…

 

viewDir = $viewDir;
}

public static function getSubscribedEvents()
{
return array(
‚Theme_Compiler_Collect_Plugin_Less‘ => ‚onCollectPluginLess‘
);
}

public function onCollectPluginLess() {

return new \Shopware\Components\Theme\LessDefinition(
,
[$this->viewDir . ‚/Resources/views/frontend/less/all.less‘]
);

}

}

 

@sschreier schrieb:

@coarsy schrieb:

Hi nochmal,

Danke für Deine Geduld. Wie so sollte man auch die Views groß schreiben, wenn das Verzeichnis wie oben erwähnt ja klein geschrieben ist. Abgesehen davon gibt es auch keni _public Verzeichnis, sondern die Daten liegen genau dort, wie ichs oben aufgemalt habe. Das macht mich echt fertig gerade!

Hall,

und warum legst du nicht einfach die Ordnerstruktur genauso an, wie Shopware es vorschreibt und ich nun mehrmals geschrieben habe? Wenn man es nicht so macht wie es vorgegeben ist, braucht man sich doch nicht wundern, das es nicht funktioniert. Das _public - Verzeichnis ist zum Beispiel auch Voraussetzung und wichtig im Pfad. Nur du schreibst das Verzeichnis views klein, Shopware schreibt es groß (Views), da kannst du bei jedem Shopware eigenen Plugin nachsehen.

Beste Grüße

Sebastian

Das ist zwar schon alt und das Problem längst gelöst aber dazu muss ich jetzt trotzdem mal was schreiben.

Das views Verzeichnis wurde nur im alten Plugin System groß geschrieben und war auch teil des Plugin Rootverzeichnisses. Im neuen Pluginsystem wird es klein geschrieben und ist ein Unterordner von Resources. Desweiteren ist es nicht mehr zwingend nötig den _public Ordner an zu legen und Less dateien werden automatisch importiert wenn sie im Ordner Resources/views/frontend/less liegen.

@zone1987 schrieb:

Das ist zwar schon alt und das Problem längst gelöst aber dazu muss ich jetzt trotzdem mal was schreiben.

Das views Verzeichnis wurde nur im alten Plugin System groß geschrieben und war auch teil des Plugin Rootverzeichnisses. Im neuen Pluginsystem wird es klein geschrieben und ist ein Unterordner von Resources. Desweiteren ist es nicht mehr zwingend nötig den _public Ordner an zu legen und Less dateien werden automatisch importiert wenn sie im Ordner Resources/views/frontend/less liegen.

Ich glaube die Information bezüglich des Pfades Resources/views/frontend/less ist so nicht ganz richtig.

Der Pfad für den Autoload ist Resources/frontend/less  und es werden NUR die Less-Dateien geladen die in der all.less importiert sind, die in diesem Verzeichniss liegen.

Sprich, habe ich eine halloWelt.less , speichere ich sie unter MeinPlugin/Resources/frontend/less/halloWelt.less

Dazu lege ich noch eine all.less (in dem Beispielfall hier im selben Verzeichniss) an und importiere dann meine halloWelt.less in dieser.

File: all.less

@import "halloWelt";

Bei CSS und JS reicht das ablegen in entsprechendem Verzeichniss.

Zumindest ist diese Vorgehensweise der Dokumentation so zu entnehmen.

 

Gruß

Dwza :slight_smile: