Plugin Settings als LESS Variable

Hallo,

ich versuche mich aktuell an einem Plugin und würde gerne gewisse Plugin Einstellungen als LESS Variable speichern. Ist das möglich? Man soll über das Plugin die Weite und Höhe eines Elements einstellen können, und dies soll dann als LESS Variable angelegt werden. Wie mann LESS Dateien in einem Plugin einbindet ist mir bewusst, aber variable Daten leider nicht.

VIelen Dank für eure Hilfe!

Du musst in Deiner Bootstrap.php dem Less-compiler die Variablen mitgeben, damit er sie einbinden kann. Das tust Du über die Funktion:

public function onCollectLessFiles(Enlight_Event_EventArgs $args)
    {
        $less = new \Shopware\Components\Theme\LessDefinition(
        //configuration
            [
                'DeineErsteLessVariable' => $this->Config()->get('DeineErsteConfigVariable'),
                'DeineErsteLessVariable' => $this->Config()->get('DeineZweiteConfigVariable')
            ],
            //less files to compile
            [
                __DIR__. '/Views/frontend/_public/src/less/all.less'
            ],
            //import directory
            __DIR__
        );

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

Und anschließend nicht vergessen, nach Änderung der Variablen das Theme neu zu kompilieren…

Christian

2 „Gefällt mir“

Hier mal noch ein aktuelles Beispiel (mit Version 5.2 und 5.3 getestet) für einen Subscriber, der alle Variablen aus der Plugin-Config in LESS verfügbar macht. Auch hier gilt, dass nach Änderung der Variablen das Theme neu kompiliert werden muss.

 'onCollectLessFiles'
        );
    }

    /**
     * register less-files
     * make all variables from plugin-config available in less
     *
     * @param \Enlight_Event_EventArgs $args
     * @return LessDefinition
     */
    public function onCollectLessFiles(\Enlight_Event_EventArgs $args)
    {
        $pluginConfig = Shopware()->Container()->get('shopware.plugin.cached_config_reader')->getByPluginName('SwagMyPlugin');
        $pluginPath = Shopware()->Container()->getParameter('swag_my_plugin.plugin_dir');

        // create array with all variables from plugin-config
        $variables = [];
        foreach ($pluginConfig as $key => $value) {
            $variables[$key] = $value;
        }

        $less = new LessDefinition(
            // array with less-variables
            $variables,
            //less files to compile
            array(
                $pluginPath . '/Resources/Views/frontend/_public/src/less/all.less'
            ),
            //import directory
            $pluginPath . '/Resources/Views/frontend/_public/src/less/'
        );

        return $less;
    }
}

 

In LESS kann die Variable dann mit

@plugin_config_element_name

verwendet werden.