Wenn das die Funktion ist, wie würde das aussehen? Ich bin leider gar nicht gut in php bzw. den Backend Frameworks… wie eingangs erwähnt bin ich in der Regel nur im Frontend (Smarty, Less und Co.) unterwegs, muss aber leider das mit der Plugin-Struktur auf die Kette bringen
/**
* @return ArrayCollection
*/
public function onCollectLessFiles()
{
$this->config = Shopware()->Container()->get('shopware.plugin.cached_config_reader')->getByPluginName('pluginName');
$less = new LessDefinition(
[
'less-variable' => $this->config['lessVariable'],
],
[
$this->pluginPath . '/Resources/views/frontend/_public/src/less/all.less',
],
$this->pluginPath
);
return new ArrayCollection([$less]);
}
Eigentlich bin ich grad nicht am Computer und mach was ganz Anderes - drum zwischen den Tasks: Ich weiß auch nicht wirklich, ob ich in „CollectLess Files“ Variablen definieren kann - hab mich mit dem Collector noch nicht beschäftigen müssen
Wenn Du wirklich den Shop-„Context“ benötigst, probier es mal so:
public function onCollectLessFiles(Enlight_Event_EventArgs $args){
$this->config = Shopware()->Container()->get('shopware.plugin.cached_config_reader')->getByPluginName('pluginName', $args['shop']);
....
}
Nachtrag:
Ob Du den Shop-Context benötigst, hängt davon ab, wie Du in der config.xml das Element definiert hast. Nur wenn dort scope=„shop“ definiert ist, benötigst Du den „Shop“, sonst geht auch der Config-Reader ohne Shop, da das Plugin dann keine Shop-speziefische Config für die Variable hat.
Ja, so geht es auch, wenn Du aus einem Frontend- oder Widget-Controller - also Shop - heraus auf die Config zugreifen möchtest. Aber der Compiler ist nunmal kein Frontend-Controller, und somit hat der Fall „onCollectLessFiles“ eben keinen Shop-Context
Mache ich was z.B. in einem „Enlight_Controller_Action_PostDispatchSecure_Frontend“, so geht das so:
(aus meinem "Ich baller alles vom Newsletter weg Plugin)
private function getConfiguration() {
/** return Plugin-Configuration from current shop */
return $this->container->get('shopware.plugin.cached_config_reader')->getByPluginName($this->getName(), $this->container->get('Shop'));
}
Das habe ich nun in einem Subshop getestet und es funktioniert. Bei Sprachshops greifen die LESS-Variablen nicht, was aber bekannt ist, da der Sprachshop ja auch kein eigenes Theme bekommt.
So 100% bin ich mit dem __get() noch nicht auf „Du“ - für einen Key im Array muss man doch GROß/klein-Schreibung beachten. Der __get benutzt den Namen ja auch nur als key.
Im Core verwendet Shopware an der Stelle den Key „shop“ - würde aus getShop() nicht „Shop“ als Key werden? Shop != shop => immer NULL?
Da brauch ich jetzt mal Nachhilfe