was muss man machen, damit Werte, welche von der Bootstrap-Datei an eine LESS-Datei innerhalb eines Plugins übergeben wird auch Subshop- und Multishop-fähig ist?
Beispiel: Man möchte je Subshop / Multishop eine andere Farbe im Frontend für das Plugin einstellen:
Das Problem scheint ja zu sein, dass die LESS-Datei kompliliert wird und beispielsweise für DE und EN keine getrennten existieren. Wie ist hierbei das Vorgehen?
naja im Frontend wird mit $this->Config() anhand des aufgerufenen Shops die richtige Konfiguration ermittelt. Das Event “Theme_Compiler_Collect_Plugin_Less” wird jedoch aufgerufen wenn der Nutzer im Backend das Theme kompiliert. Die Standard Routine kann nicht ermitteln für welchen Shop die Konfiguration geladen werden soll. ( Natürlich wird das Event für jeden Shop einzeln aufgerufen, aber die Ermittlung um welchen Shop es sich handelt läuft leider etwas anders ab. => funktioniert nur im Frontend )
So viel dazu warum dein Code nicht funktioniert. Nun zur Lösung
Die Argumente im Collect_Plugin_Less-Event enthalten unter anderem den Shop. Und schon fehlt nicht mehr viel um die richtige Konfiguration zu laden:
public function addLessFiles(Enlight_Event_EventArgs $args)
{
$shop = $args->getShop();
$config = $this->collection->getConfig($this->name,$shop);
$less = new \Shopware\Components\Theme\LessDefinition(
array(
'beispiel-color' => $config->get('beispiel-color');
),
array( __DIR__. '/Views/frontend/_public/src/less/all.less'),
__DIR__
);
return new Doctrine\Common\Collections\ArrayCollection(array($less));
}
Den Code habe ich zwar jetzt nicht getestet sollte aber funktionieren.
habe leider doch noch eine Rückfrage zu dem Code… Er funktioniert nicht bei Sprachshops - also bei unterschiedlichen Einstellungen DE und EN wechselt beispielsweise keine Schriftfarbe, wenn dies zuvor eingestellt wurde. Liegt das daran, dass Sprachshops auch kein getrenntes Theme und damit keine eigene kompilierte LESS-Datei haben?
Funktioniert der Code dann bei Nicht-Sprachen-Subshops? Multishops?