Plugin-Konfiguration variabelen speichern auf install

 

Hallo!

Wir möchten die Plugin-Konfiguration beim Installieren des Plugins vorab füllen.

Zum Beispiel wird im Installer ein neues Media album erstellt. Die entsprechende mediaID sollte direkt als Parameter von der Plugin-Konfiguration gespeichert werden.

Ist das möglich? Wenn das so ist, wie?

Hallo,

Du kannst über “value” einen Default Wert setzen: Plugin configuration

Viele Grüße aus Schöppingen

cool Michael Telgmann

 Hallo Michael, uns ist der Standardwert bekannt. Der Standardwert hängt jedoch von der mediaID ab, die dynamisch über das Installationsprogramm erstellt wird. Also suchen wir nach einer Lösung, die das im Installer macht: 1. Medienalbum erstellen (mediaAlbumID wird zurückgegeben) 2. Öffnen Sie die Plugin-Konfiguration. 3. Platziere MediaAlbumID in Config 4. Speichern Sie die Konfiguration.

Hallo,

die Plugin Konfiguration wird vor dem Aufruf der install Methode angelegt. D.h. Du kannst dir in der install Methode die Config Form holen und den Wert entsprechend setzen. 

Viele Grüße aus Schöppingen

cool Michael Telgmann

Hallo Michael, danke für die input.

Haben Sie ein kurzes Beispiel dafür?
Normalerweise verwenden wir den folgenden Code zum Abrufen von Konfigurationsdaten:

 // get plugin with shop in scope _$pluginConfig = Shopware()-\>Container()-\>get('shopware.plugin.cached\_config\_reader')-\>getByPluginName( 'MyPlugin', Shopware()-\>Container()-\>get('Shop') );__$my\_plugin\_variabel = $pluginConfig['my\_plugin\_variabel'] );_ Wie können wir die aktualisierten Konfigurationsdaten speichern? _$pluginConfig['my\_plugin\_variabel'] = 'new\_variable'; $pluginConfig-\>write();_

scheint nicht zu funktionieren

 

Hallo,

mit deinem Beispiel Code holst du dir ja schon die passenden Werte von der Konfiguration.
Mein Ansatz war jetzt eher, sich das Doctrine Model der Plugin Configuration zu holen, um dann den Value als Default zu setzen, da du ja erst später weißt, wie die Album ID ist. 
Hier mal ein bisschen ungetester Code, der hoffentlich zeigt, was ich meine  Smile

$pluginId = $this->container->get('dbal_connection')->createQueryBuilder()
    ->select('id')
    ->from('s_core_plugins')
    ->where('name = :pluginName')
    ->setParameter('pluginName', $this->getName())
    ->execute()->fetchColumn();

$formRepo = $this->container->get('models')->getRepository(\Shopware\Models\Config\Form::class);
/** @var \Shopware\Models\Config\Form $formModel */
$formModel = $formRepo->findOneBy(['pluginId' => $pluginId]);

$formElementRepo = $this->container->get('models')->getRepository(\Shopware\Models\Config\Element::class);
/** @var \Shopware\Models\Config\Element $formElement */
$formElement = $formRepo->findOneBy(['formId' => $formModel->getId(), 'name' => 'your_config_element_name']);

$formElement->setValue(123); // media ID
$this->container->get('models')->flush($formElement);

Viele Grüße aus Schöppingen

cool Michael Telgmann