Less Files im Plugin einbinden / neues Plugin System

Hi und Servus,

ich versuche gerade im neuen Plugin-System ein Less File einzubinden und zwar so:

 

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

    public function addLessFiles(\Enlight_Event_EventArgs $args)
    {
        $less = new \Shopware\Components\Theme\LessDefinition(
        //configuration
        array(),
    
            //less files to compile
            array(
                __DIR__. '/Resources/views/frontend/less/all.less'
            ),
    
            //import directory
            __DIR__
        );
    
        return new Doctrine\Common\Collections\ArrayCollection(array($less));
    } 	

 

Die Theme Kompilierung schlägt aber fehl… Hat jemand ne Idee, weshalb das nicht mehr so funktioniert? Ab 5.2.13 muss das Ding ja direkt
in der angegeben Resource liegen und wird automatisch eingebunden. Aber was ist mit Vorgängerversionen?

Vielen Dank und viele Grüße,

Chris

@coarsy schrieb:

Hi und Servus,

ich versuche gerade im neuen Plugin-System ein Less File einzubinden und zwar so:

 

public static function getSubscribedEvents()
{
return [
‘Enlight_Controller_Action_PostDispatchSecure_Frontend’ => ‘onFrontendPostDispatch’,
‘Theme_Compiler_Collect_Plugin_Less’ => ‘addLessFiles’,
];
}

public function addLessFiles(\Enlight_Event_EventArgs $args)
{
$less = new \Shopware\Components\Theme\LessDefinition(
//configuration
array(),

//less files to compile
array(
DIR. ‘/Resources/views/frontend/less/all.less’
),

//import directory
DIR
);

return new Doctrine\Common\Collections\ArrayCollection(array($less));
}

 

Die Theme Kompilierung schlägt aber fehl… Hat jemand ne Idee, weshalb das nicht mehr so funktioniert? Ab 5.2.13 muss das Ding ja direkt
in der angegeben Resource liegen und wird automatisch eingebunden. Aber was ist mit Vorgängerversionen?

Vielen Dank und viele Grüße,

Chris

Hallo,

du musst dir definitiv das Entwickler - Handbuch besorgen, da steht das alles ausführlich drin. Es wird nicht immer jemanden geben, der das alles hier ausführlich beschreibt oder beantwortet. Ein “try & error” bringt weder dich noch andere weiter. Auf jeden Fall solltest du das alte und das neue Pluginsystem nicht miteinander vermixen in der Hoffnung, dass das schon irgendwie funktonieren wird.

Automatisch wurden und werden LESS-Dateien nicht eingebunden, das muss man schon immer mit der all.less selbst tun.

Im neuen Pluginsystem erfolgt die LESS-Einbindung in etwa so:

use Shopware\Components\Theme\LessDefinition;

...

public function addLessFiles(){
  return new LessDefinition(
     [],
     [
          __DIR__.
          '/../Resources/Views/frontend/_public/src/less/all.less'
     ]
  );
}

Beste Grüße

Sebastian

Hi Sebastian,

so stimmt das nicht ganz, siehe:

 

Autoloading of plugin resources

Plugin resources inside of the PluginName/Resources/frontend directory are now loaded automatically on theme compilation when using the new plugin system.

Example:

  • custom/plugins/SwagResourceTest/Resources/frontend/css/**.css
  • custom/plugins/SwagResourceTest/Resources/frontend/js/**.js
  • custom/plugins/SwagResourceTest/Resources/frontend/less/all.less

 

Steht im Changelog. Ich kriegs auch mit Deinem Beispiel nicht in, dass die Resource all.less im Pfad

custom/plugins/SwagResourceTest/Resources/frontend/less/all.less

kompiliert wird.

LG und Dankeschön,

Chris

@coarsy schrieb:

Hi Sebastian,

so stimmt das nicht ganz, siehe:

 

Autoloading of plugin resources

Plugin resources inside of the PluginName/Resources/frontend directory are now loaded automatically on theme compilation when using the new plugin system.

Example:

  • custom/plugins/SwagResourceTest/Resources/frontend/css/**.css
  • custom/plugins/SwagResourceTest/Resources/frontend/js/**.js
  • custom/plugins/SwagResourceTest/Resources/frontend/less/all.less

 

Steht im Changelog. Ich kriegs auch mit Deinem Beispiel nicht in, dass die Resource all.less im Pfad

custom/plugins/SwagResourceTest/Resources/frontend/less/all.less

kompiliert wird.

LG und Dankeschön,

Chris

Hallo,

Der Pfad müsste aber „custom/plugins/SwagResourceTest/Resources/ Views /frontend/less/all.less“ lauten (Views war eigentlich immer schon dazwischen), wenn du mein Codeschnipsel nutzt ;). Am besten sollte man auch einen eigenen Subscriber dafür nutzen + Service. Die Einbindung funktioniert so auch (use Shopware\Components\Theme\LessDefinition; muss natürlich außerhalb sein) - steht auch fast 1 zu 1 so im Buch, wenn müsste es also auch dort falsch sein ;).

Ob es ab Shopware 5.2.13 automatisch geht, weiss ich nicht.

Beste Grüße

Sebastian

Ich habe mal das Testsystem auf eine aktuelle 5.2.14 gebracht und die Resourcen werden mitnichten kompiliert… Dann stimmt was im Changelog nicht!

Hmmm, auch das funktioniert nicht wirklich:

		public function addLessFiles(){
		  return new LessDefinition(
		     [],
		     [
		          __DIR__.
		          '/../custom/plugins/CbeBlogSystem/Resources/views/frontend/less/all.less'
		     ]
		  );
		}		

Die Daten liegen wohlgemerkt in dieser Struktur vor:

CbeBlogsysten
|__Resources
    |__views
               |__frontend
                               |__less und dann darin die all.less

 

Sehr komisch das Ganze… Mit dem alten System kam ich bislang besser zurecht, zumindest was das Less Compiling angeht. Für 2 Zeilen CSS muss man sich schon fast überlegen, ob mans nicht Inline macht…

 

@coarsy schrieb:

Hmmm, auch das funktioniert nicht wirklich:

public function addLessFiles(){
return new LessDefinition(
,
[
DIR.
‘/…/custom/plugins/CbeBlogSystem/Resources/views/frontend/less/all.less’
]
);
}

Die Daten liegen wohlgemerkt in dieser Struktur vor:

CbeBlogsysten
|__Resources
    |__views
               |__frontend
                               |__less und dann darin die all.less

 

Sehr komisch das Ganze… Mit dem alten System kam ich bislang besser zurecht, zumindest was das Less Compiling angeht. Für 2 Zeilen CSS muss man sich schon fast überlegen, ob mans nicht Inline macht…

 

Hallo,

hast du es einfach mal mit Views probiert (Großschreibung, wie ich ja nun schon 2 x geschrieben habe)?

Beste Grüße

Sebastian

Ja, auch schon versucht, allerdings ohne Wirkung…

@coarsy schrieb:

Ja, auch schon versucht, allerdings ohne Wirkung…

Hallo,

und auch schon mit dem Code von oben:

use Shopware\Components\Theme\LessDefinition;

...

und dann unten bei den Funktionen:

public function addLessFiles(){
  return new LessDefinition(
     [],
     [
          __DIR__.
          '/../Resources/Views/frontend/_public/src/less/all.less'
     ]
  );
}

und nicht mit deinem Code, wo du irgendwelche festen Werte (Pluginnamen etc) reinschreibst? Achte vorallem auch auf die Namen und nenn es nicht einfach so, wie du Bock hast (views klein, etc.).

Beste Grüße

Sebastian

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!

@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

1 Like

Hi nochmal,

na, da in der neuen Doku des Pluginsystem irgendwo steht, dass man das Verzeichnis in Kleinschreibung anlegt. Selbstverständlich habe ich auch sämtliche Schreibweisen ausprobiert und auch die Ordnerstruktur entsprechend so angelegt, wie Du das vorgegeben hattest. Wir reden aber schon vom neuen Pluginsystem? Welches shopwareeigene Plugin basiert denn bereits auf dem neuen System? Die sind doch allesamt noch Oldschool…

Schau mal bitte hier, da isses auch klein geschrieben:

 

@coarsy schrieb:

Schau mal bitte hier, da isses auch klein geschrieben:

 

https://github.com/shyim/shopware-profiler/tree/master/Resources/views/frontend

Hallo,

er hat doch auch eine all.less eingebunden, und mit _public - Verzeichnis (siehe Pfad: https://github.com/shyim/shopware-profiler/blob/master/Resources/views/frontend/_public/src/less/all.less). Ja wir reden logischerweise vom neuen Pluginsystem. Wahrscheinlich ist es bei views oder Views egal, beim Rest des Pfades aber nicht.

Beste Grüße

Sebastian

So, jetzt habe ich die all.less genauso angelegt wir er, aber so funktionierts immer noch nicht:
 

		public function addLessFiles(){
		  return new LessDefinition(
		     [],
		     [
		         __DIR__.
		        '/../Resources/Views/frontend/_public/src/less/all.less'
		     ]
		  );
		}		

Da ist doch einfach der Pfad immer noch falsch.

In seinem Subscriber heißt es: $this->viewDir . ‘/frontend/_public/src/less/all.less’,
Nur was ist hier $this->viewDir ?

Hast du denn in der Less etwas irreguläres stehen? Oder ist die leer?

Nein, alles in bester Ordnung. Sind nur 2 Zeilen. Der Compiler läuft auch durch, es wird aber einfach nix eingebunden

@coarsy schrieb:

So, jetzt habe ich die all.less genauso angelegt wir er, aber so funktionierts immer noch nicht:
 

public function addLessFiles(){
return new LessDefinition(
,
[
DIR.
‚/…/Resources/Views/frontend/_public/src/less/all.less‘
]
);
}

Da ist doch einfach der Pfad immer noch falsch.

In seinem Subscriber heißt es: $this->viewDir . ‚/frontend/_public/src/less/all.less‘,
Nur was ist hier $this->viewDir ?

Hallo,

hast du wie er wenigstens für die LESS-Einbindung auch eine eigene Subscriber - Datei angelegt + service.xml - Eintrag etc ( https://github.com/shyim/shopware-profiler/blob/master/Subscriber/Assets.php#L19 )? Und der Pfad ist nicht falsch, wenn man es so abgelegt hat…

Beste Grüße

Sebastian

Hab ich alles gemacht, wenn ich mir den Pfad zur Lessdatei schicken lasse, dann steht bei Verwendung von:

__DIR__ . ‚/…/Resources/views/frontend/_public/src/less/all.less‘;

/html/shopware/shopwaretest/custom/plugins/CbeTrustedRich/Subscriber…/Resources/views/frontend/_public/src/less/all.less

Das Subscriber müsste also hier noch weg. Wenn ich den Pfad hardcoded eingebe, dann klappts wunderbar!

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']
	    ); 
	
	  }

}

Danke für Eure Hilfe und ein schönes Wochenende!