Daten von Subscriber/Controller an CMS Element übergeben

Indem du ihn in deine service.xml packst, dein constructor implementierst und dann per $this-> darauf zugreifst.

Max, danke für deine Hilfe,
allerdings habe ich ja geschrieben dass ich die Daten schon habe:

Die Daten habe ich schon

= ich habe natürlich die Config und die Daten im ElementResolver.php, dafür gibt es ja zum Glück mal ausnahmsweise SW-Dokus.

$this->systemConfigService = $systemConfigService;
        $systemConfig = $this->systemConfigService->getDomain('MypluginName');

Wo es aber keine Dokus gibt, wie bereite ich diese Variablen der Config in collect() und enrich() so auf, dass .twig die sehen kann (also die in dem dump() zu finden sind).
Die criteria Beispiele oben helfen da nicht.
Falls du das weißt, poste doch bitte mal ein Beispiel dazu, mit total allgemein gehaltenen Infos hilfst du niemanden, der nicht vorher schon wusste wie.
Ist verm. nur ne Zeile.
Wie es prinzipiell geht weiss ich, aber das Problem liegt hierbei (wie oft in SW) im Detail.
danke dir.

Wenn du hier reinschaust, dann wirst du viele Beispiele sehen: Search · resolver · GitHub

Die Daten werden per Stuckt ans Frontend übermittelt.

@hermetic, Wenn ich dich richtig verstehe, möchtest du im Template auf die Plugin-Konfiguration zugreifen? Dann kannst du die Twig Funktion config('Pluginname.config.configName') verwenden.
Da muss nichts in der collect- oder enrich-Methode aufbereitet werden.

Hallo abdullah,
Hab ich auch gelesen und schon probiert. Klappt leider nicht. Kann das sein, dass das in CMS-objekten nicht geht, wenn von der Storefront-Page diese Variablen nicht verfügbar sind? Im dump() finde ich dazu auch nix. (auch mit parent und shopware.config.MypluginName.config usw. getestet) Benutze z.Zt. SW 6.4.14.0

@ Max_Shop danke, dass ich erstmal bei Github nachschaue, bevor ich hier im Forum nachfrage, davon kannst du ausgehen. Machen vermutlich (fast) alle, schon aus Zeitgründen. :wink:

Die Info mit dem Struct ist da schon besser. Nur ist mir leider nicht klar, wie das dann vom CMS Element angesprochen wird und wie ich dort die Daten vom Plugin-Config einstelle. Beispiele hab ich dazu in Verbindung mit systemConfigService auch nicht gefunden.
Hast du so ein konkretes Beispiel, das neben der CMS-Hauptfunktion die Daten des Plugin-Config mitliefert?

Wie @abdullah geschrieben hat, wenn du die Config-Einstellungen nicht modifiziert in twig benutzen möchtest, dann kannst du einfach per config(‚Pluginname.config.configName‘) darauf zugreifen. Falls das nicht funktioniert, wie du geschrieben hast, dann hast du etwas falsch gemacht. Das geht überall.

Die Config-Einstellungen wirst du im dump auch nicht finden. config() ist eine twig Funktion.

Danke, deine Antworten sind wieder sehr hilfreich, dass config() ein twig-befehl ist, ist klar.
Denke ich hatte geschrieben, dass ich die entsprechende Info in der Doku gelesen hatte?

Bei einem normalen Plugin .twig-code:
testme:{{ config('MyanderespluginName.config.days') }}
testme:5

In CMS-plugin .twig:
testme:{{ config('MypluginName.config.days') }}
testme:

Werde das nun noch mal in einem anderen CMS-Plugin testen, um sicherzugehen.
Bei dem Struct kannst du mir bisher nichts genaueres sagen, wie das mit dem Resolver zusammenhängt?

Für alle die auch danach suchen und sich hierhin verirren:
Eingebunden wird das struct in der enrich-funktion über

$myCmsStruct = new ProductStreamsStruct(); 
$slot->setData($myCmsStruct);

Das Struct heisst dann ProductStreamsStruct in entsprechender .php Datei.
Was ich aber dort für extra Funktionen für den systemConfig bauen muss, weiss ich bisher nicht (außer die allgemeine Doku oben), auch nicht wie ich dieses dann in collect/enrich anspreche (falls ein Extraaufruf dort hin muss).
Kann natürlich sein, ich hab in dem CMS was falsch gemacht, aber selbst dann wäre mal eine Erklärung, wie das struct mit enrich/collect konkret zusammen arbeitet/wie man das erweitert hilfreich…

Ich habe jetzt nicht so viel Erfahrung mit der Entwicklung von CMS Plugins, habe nur eins oder zwei Stück geschrieben, aber bei der einen Erweiterung habe ich die config Funktion verwendet, um die Plugin Config auszulesen.

Der erwartete Config Variable existiert auch? Findest du die Config Variable auch in der DB Tabelle system_config?

1 „Gefällt mir“

Hallo abdullah,
ja ich habe in dem CMS mit

    public function __construct(SystemConfigService $systemConfigService)
    {
          $this->systemConfigService = $systemConfigService;
          $systemConfig = $this->systemConfigService->getDomain('MypluginName');
          var_dump($systemConfig);
          die();
    }

mir die ausgeben lassen, klappte. Also denke sollte zumindest mein Fehler nicht im config oder einer nicht gefüllten Variable liegen.
Naja, ich schau noch, vielleicht finde ich ja den Bug.
Danke dir.

Ich habe eben in mein CMS-Element block.html.twig

{{ dump(config('MyPlugin.config')) }}

eingegeben und bekomme die komplette Konfiguration als Dump angezeigt.

Das hilft dir jetzt auch nicht viel, bestätigt aber @abdullah und meine Aussage, dass die config in twig verfügbar ist.

In GitHub siehst du, dass für jedes CMS-Element ein eigenes Struct erstellt wird und dann im Resolver gefüllt. Der MediaResolver sollte ein gutes Beispiel sein, da werden die Bilder in das Struct geschrieben.