Subshop- / Multishop-Fähigkeit LESS Style-Felder wie etwa color

Hallo,

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:

$form->setElement('color', 'textColor',
            [
                'scope' => Shopware\Models\Config\Element::SCOPE_SHOP,
                'value' => '#ffffff',
                'label' => 'Textfarbe',
                'description' => '...'
            ]
);

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?

 

Vielen Dank für eure Hilfe!

 

Wenn man das Subshop-Lizenz Plugin von Shopware abschaltet, werden z.B.: Farben des Plugins korrekt übertragen.
Bsp.: Shop 1 = rot; Shop 2 = grün

Bei aktiviertem Subshop-Lizenz Plugin bekommt Shop 2 auch rot. Wie kann das sein?

Wie geht man vor, um Plugin-Konfigurationen, welche das Aussehen betreffen, für Subshops konfigurierbar zu machen?

Kann bei der Menge an Plugins doch nicht sein, dass keiner weiß, wie man ein Plugin komplett Subshop-Fähig macht? blush

Die Code Zeile

'scope' => Shopware\Models\Config\Element::SCOPE_SHOP,

steht ja auch in der Doku. Aber warum funktioniert es nicht bei den Styles? Oder sollte das eigentlich funktionieren?

Wie wertest du denn das Ergebnis im Theme/LESS aus?

Ich schaue mir die CSS-Datei an und auch direkt die Elemente mit den Entwicklerwerkzeugen.

Ich meine wie holst du deine Variablen ab, technisch, im Plugin/View

 Rufe diese Funktion auf

    /**
     * @return \Shopware\Components\Theme\LessDefinition
     */
    public function addLessFiles(Enlight_Event_EventArgs $args)
    {
        $less = new \Shopware\Components\Theme\LessDefinition(
        //configuration
            array(
                'beispiel-color' => $this->Config()->get('beispielColor')
            ),
            //less files to compile
            array(
                __DIR__. '/Views/frontend/_public/src/less/all.less'
            ),
            //import directory
            __DIR__
        );
        return new Doctrine\Common\Collections\ArrayCollection(array($less));
    }

 

1 „Gefällt mir“

Hallo zenit,

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  crying

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.

Viele Grüße

2 „Gefällt mir“

Vielen Dank, ich werde das testen und eine Rückmeldung geben! no

(Kann man im neuen Forum eigentlich noch “Danke” abgeben?)

 

EDIT: “Danke” kann man nun wieder abgeben - dann solls das für die Antwort auch geben

Rückmeldung: Der Code scheint zu funktionieren Thumb-Up

Hallo simkli, 

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?

VG, Zenit