Plugin Config/Settings abrufen

Hello again.

Ich finde keine Beispiele, wie die Plugin Konfigurationen abgerufen werden können.
Das einzige, was in die Richtung geht, ist der Settings-Service im PayPal Plugin (https://github.com/shopwareLabs/SwagPayPal/blob/aae88e01f24e48125b86f5b3735a6e7a31a946d6/src/Setting/Service/SettingsService.php)

Gibt es nicht sowas wie den Config-Reader (mit allem was dazu gehört)?
Ebenfalls kann ich aus der Doku nicht herauslesen, wie das bzgl. Konfigurationen pro Storefront (?) aussehen soll.
Man benötigt ja wie in der Vergangenheit spezifische Konfigurationen.

Schöne Grüße!
Niklas

hier hast du ein beispiel https://github.com/FriendsOfShopware/FroshPlatformPerformance/blob/master/src/Subscriber/MinifySubscriber.php#L35

Danke, @Shyim‍! Das habe ich gesucht  Thumb-Up

Ich habe leider noch eine doofe Frage - ich finde Plugin Konfigurationen in der Administration nicht …  Grin
In der Doku wird gesagt:

Plugins konfigurieren

Installierte Plugins stellen einen eigenen Menüeintrag unter  Einstellungen > Plugins  bereit, über den Du die Konfiguration des Plugins öffnen kannst. Informationen zur Funktion und Konfiguration der einzelnen Plugins findest Du in der jeweiligen Plugin-Dokumentation.

Ich bin in der Plugin-Übersicht, finde aber keine gesonderten Menüeinträge. Auch im normalen Menü in der Seite gibt es nichts gesondertes.
Weder bei eigenen Plugins, noch bei anderen aus den Beispielen (oder z.B. PayPal)
Ich habe jetzt gefühlt jeden Punkt einmal angeklickt, erkenne aber nichts …

Schöne Grüße!
Niklas

Im Plugin Manager über das Context Menü kommst du da hin. Ist aktuell noch etwas umständlich. Also die drei Punkte anklicken.

Nach einem Neustart der Docker-Instanz und der Administration hat PayPal nun einen Eintrag unter Einstellungen > Plugins - dafür die eigenen Test-Plugins nicht.

Mir ist aufgefallen, dass die Plugin Configs von PayPal als settings.xml vorhanden sind, alle Beispiele reden aber immer von einer config.xml.
Die Einträge werden auch als SwagPayPal.settings gespeichert, nicht als SwagPayPal.config.
Wenn ich meine config.xml umbenenne, macht das alles nur leider keinen Unterschied - meine configs werden nicht angenommen und als Settings im Admin angezeigt.

Ich habe den Anweisungen unter https://docs.shopware.com/en/shopware-platform-dev-en/internals/plugins/plugin-config?category=shopware-platform-dev-en/internals/plugins gefolgt - daher die Frage, was noch zu tun ist? … mehr als eine config.xml unter src/Resources/config ist doch nicht notwendig? … Standard-Werte einer Einstellung finde ich auch nicht  Frown

Schöne Grüße,
Niklas

Hallo Niklas,

Aktuell gibt es keine Möglichkeit Standardwerte in der XML zu definieren, dass liegt an der neuen Art wie wir diese auslesen. Die config.xml wird immer live vom DateiSystem gelesen und gibt somit immer die aktuelle Struktur vor. Dies bereitet weniger Probleme bei updates etc.
Standard Werte sind dennoch möglich in dem man diese per install Methode schreibt. Dazu gerne mal einen Blick ins PayPal Plugin werfen.

Wenn du alles so machst wie in dem How-To muss es funktionieren. Es gibt dort auch keine Caching Probleme etc.
Ich würde vorschlagen, du kontrollierst noch mal ob:
a) Alle Ordner/Dateien richtig benannt sind (Groß und klein Schreibung)
b) Dein Plugin installiert und aktiviert ist, denn ur dann wird die Config aus gespielt.

Wenn das alles zutrifft, solltest du wie Moritz schon erwähnt hat, deine Einstellungen im Plugin Manager Context Menü finden.
Bei PayPal funktioniert das mit der settings.xml etwas anders. Im standard ist es die config.xml.

Grüße Sebastian
 

Hi @Seg‍!

Danke für das Feedback!

Aktuell gibt es keine Möglichkeit Standardwerte in der XML zu definieren, dass liegt an der neuen Art wie wir diese auslesen. Die config.xml wird immer live vom DateiSystem gelesen und gibt somit immer die aktuelle Struktur vor. Dies bereitet weniger Probleme bei updates etc.
Standard Werte sind dennoch möglich in dem man diese per install Methode schreibt. Dazu gerne mal einen Blick ins PayPal Plugin werfen.

Okay - dann gucke ich mir das mal etwas genauer an.
Trotzdem schade, dass man nicht einfach default Werte definieren kann - das war im “alten” System schon sehr gut …

Wenn du alles so machst wie in dem How-To muss es funktionieren. Es gibt dort auch keine Caching Probleme etc.

Habe ich so:

| ____ composer.json
| ____ src
| | ____ Resources
| | | ____ config
| | | | ____ config.xml
| | ____ Test.php

Plugin gibt es unter https://www.dropbox.com/s/4zo4fjv13rk20rn/TdsTest.zip
Beinhaltet wirklich nur das allernötigste wie man sieht - quasi nur die config (1:1 Kopie aus der Doku) …

        Basic Configuration
        Grundeinstellungen

        
            email
            true
            eMail address
            E-Mail Adresse
            you@example.com
            du@beispiel.de
            Please fill in your personal eMail address
            Bitte trage deine persönliche E-Mail Adresse ein
        

        
            mailMethod
            
                
                    smtp
                    English smtp
                    German smtp
                
                
                    pop3
                    English pop3
                    German pop3
                
            
            Mail method
            Versand Protokoll
        
    

    
        Advanced Configuration
        Erweiterte Einstellungen
        
            secret
            Secret token
            Geheim Schlüssel
            Your secret token for xyz...
            Dein geheimer Schlüssel für xyz...

 

Ich würde vorschlagen, du kontrollierst noch mal ob:
a) Alle Ordner/Dateien richtig benannt sind (Groß und klein Schreibung)
b) Dein Plugin installiert und aktiviert ist, denn ur dann wird die Config aus gespielt.

Ist/bleibt bei mir leer, im Kontext-Menü des Plugin Managers …


Als auch an der Doku genannten Stelle im Menü unter Einstellungen > Pugins …

Da komme ich leider nicht weiter.
Die Dateien sind wie ich es verstehe da, haben Inhalt, Plugin ist installiert, Plugin ist aktiviert, Caches sind (auch wenn es nicht notwendig ist) leer, admin wurde mal neu aufgerufen, plugin:refresh macht nichts … woran kann es liegen? Installation ist die Docker-Variante unter Mac.

Schöne Grüße,
Niklas

M‍oin @TeichDatensysteme‍,

ich habe mir dein Plugin mal angesehen. Lässt sich auch alles installieren wunderbar. Wenn du, mit deinem Plugin installiert und aktiviert, den PluginManager einmal neu lädst. Dann wirst du im Network Tab sehen, dass du dort einen XML Parsing Error bekommst. In Zeile 20 deiner config.xml hast du “select” als input-field type angegeben, dass ist kein valider typ. Wenn du diesen type mit single-select tauscht, taucht deine Konfiguration auch auf. Das steht leider noch falsch in der Doku drin habe das schon weitergeben.

 

Grüße Sebastian

Das ist auch kurios bisher, @Seg‍.
Eben hab ich ein anderes Test-Plugin konfigurieren können - aus Gründen mehrfach deaktivier/aktiviert, installiert/deaktiviert und die Konfigurationsazeige im Plugin-Manager ist wieder weg. Ich konnte also kurzzeitig die Konfigurationsseite des Plugins aufrufen - jetzt wieder nicht (bei gleichem XML Inhalte, keine Parsing Errors) …

EDIT: Habe glaube ich die Ursache - der Menüpunkt „Konfiguration“ erscheint SEHR viel später, als das Kontextmenü.
Ich teste über Docker (super super super langsam), hatte das Kontextmenü eben zufällig länger auf - jetzt ist es da.

H‍allo @TeichDatensysteme‍,

das wird dann wohl daran liegen, wenn die Docker Installation etwas langsamer ist, weil wir die Configs nachladen müssen, diese sind im Standard nicht an der Plugin Entität.

Grüße Sebastian 
 

Moin,

wie kann ich die Config-Parameter die ich über:

$this->systemConfigService->get('PaulFirstPlugin.config.example');

mir im Subscriber hole an die VIEW geben ?

Grüße Marc

@Seg schrieb:

H‍allo @TeichDatensysteme‍,

das wird dann wohl daran liegen, wenn die Docker Installation etwas langsamer ist, weil wir die Configs nachladen müssen, diese sind im Standard nicht an der Plugin Entität.

Grüße Sebastian 

Stimmt - kann ich so nachstellen. Danke!
Hast Du eine Idee, wieso ich meine Config Parameter nur mit Test.config.example holen kann statt PrefixTest.config.example?

@Marc

Du kannst im Subscriber Event die Objekte erweitern, die page, das product, … wie Du willst (per assign).
Das klappt dann so wunderbar.

Schöne Grüße,
Niklas 

Hab gerade herausgefunden dass in der config.xml nur aA-zZ akzeptiert :frowning:

[@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski „Moritz Naczenski“)‍ Warum wird kein „_“ zugelassen? ich mag meine snake case

@kanuma schrieb:

Moin,

wie kann ich die Config-Parameter die ich über:

$this->systemConfigService->get(‘PaulFirstPlugin.config.example’);

mir im Subscriber hole an die VIEW geben ?

Grüße Marc

use Shopware\Storefront\Event\StorefrontRenderEvent;
use Shopware\Core\System\SystemConfig\SystemConfigService;

public function __construct(SystemConfigService $config)
{
    $this->config = $config;
}

public static function getSubscribedEvents(): array
{
    [
        StorefrontRenderEvent::class => 'onStorefrontRender'
    ];
}

public function onStorefrontRender(StorefrontRenderEvent $event)
{
    $config = $this->config->get('TechnischerName.config');
    $event->setParameter('foo', 'bar');
}

Falls die Problematik noch besteht: Hier ein Beispiel wie ich dies in meinem Subscriber umgesetzt habe :slight_smile:

1 Like

wie erhalte ich die konfiguration im admin bereich?

 

@HendrikWegner schrieb:

@kanuma schrieb:

Moin,

wie kann ich die Config-Parameter die ich über:

$this->systemConfigService->get(‚PaulFirstPlugin.config.example‘);

mir im Subscriber hole an die VIEW geben ?

Grüße Marc

use Shopware\Storefront\Event\StorefrontRenderEvent;
use Shopware\Core\System\SystemConfig\SystemConfigService;

public function __construct(SystemConfigService $config)
{
$this->config = $config;
}

public static function getSubscribedEvents(): array
{
[
StorefrontRenderEvent::class => ‚onStorefrontRender‘
];
}

public function onStorefrontRender(StorefrontRenderEvent $event)
{
$config = $this->config->get(‚TechnischerName.config‘);
$event->setParameter(‚foo‘, ‚bar‘);
}

Falls die Problematik noch besteht: Hier ein Beispiel wie ich dies in meinem Subscriber umgesetzt habe :)

Es fehlen

use Shopware\Storefront\Event\StorefrontRenderEvent;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

public function __construct(SystemConfigService $config){
    $this->config = $config;
}

public static function getSubscribedEvents(): array{
    return [ StorefrontRenderEvent::class => ‚onStorefrontRender‘ ];
}

public function onStorefrontRender(StorefrontRenderEvent $event){
    $config = $this->config->get(‚TechnischerName.config‘);
    $event->setParameter(‚foo‘, ‚bar‘);
}

sonst kommt einmal der Fehler, must be of the type array, none returned und Plugin was not found due to the error message „Class“ … not found while loading "\Subscriber\Frontend

 

Gruß