Hallo Zusammen,
Ich möchte gerne ein Modul (aus OXID) portieren und vom Shop unabhängigen PHP-Code hierbei wiederverwenden.
Dazu müsste Ich den PHP-Code ausführen und das Ergebnis an mein Admin-Template (z.B. als Variable) weiterreichen können.
Das Standard-Rahmenwerk entsprechend der How-To Anleitung läuft soweit. Es gibt eine eigene Componente mit Template-Datei die mir auch einen Testausgabe erzeugt.
Was mir fehlt ist die „Brücke“ zwischen dem Twig-Template und meinem PHP-Code.
Das Zuweisen einer Variable ist ja über die „index.js“ möglich über welche auch die Component registriert wird.
Klappt auch wenn Ich der Variable einen fixen String zuweise.
Wie kann man nun innerhalb der „index.js“ auf den PHP-Code verweisen und das Ergebnis der Variablen zuweisen?
(oder alternativ die PHP-Klasse als Variable zuweisen deren Funktionen dann direkt im Template verwendet werden können)
Unabhängig davon kann Ich im Template die Funktion „{{ dump() }}“ nicht aufrufen (wollte nachsehen ob und welche Variablen ohne direkte Zuweisung verfügbar sind).
In der Browser-Console wird nur ausgegeben „ReferenceError: dump is not defined“.
Habe die aktuelle Entwicklungsumgebung installiert. Eine Idee warum das nicht funktioniert?
Danke und Grüße,
Ben
Ich hab deine Frage noch nicht ganz verstanden.
Der Admin von Shopware 6 spricht mit unserer API. Du legst dir einen API Controller an, der wiederum bspw. einen Service aufruft der deinen PHP-Code ausführt und den passenden Inhalt an deinen API Controller gibt, den der Admin aufruft. So hätte ich das zumindest gemacht.
Guten Morgen und Danke für die Rückmeldung.
Ich mache am Besten mal ein Beispiel, dann versteht man es besser.
Zunächst habe Ich eine “custom component” erstellt nach dem Beispiel in der Dokumentation:
https://docs.shopware.com/en/shopware-platform-dev-en/how-to/custom-component
Dort gibt es die index.js. Diese habe Ich noch um den Bereich “created” Erweitert um dort Variablen an das Twig-Template zu übergeben.
Shopware.Component.register('hello-world', {
template: template,
created() {
this.testoutput = "Testausgabe"
}
});
Anstatt dem fix eingestellten Wert “Testausgabe” möchte Ich nun auf eine PHP-Funktion verweisen, welche mir passenden Code erzeugt.
Dazu habe Ich auch einen entsprechenden Service erstellt, ebenfalls nach HowTo:
https://docs.shopware.com/en/shopware-platform-dev-en/how-to/add-service?category=shopware-platform-dev-en/how-to
Wie verweise Ich in der index.js der “cutom component” auf diesen Service um z.B. die Beispielfunktion “doSomething” aufzurufen?
Danke und Grüße,
Ben
Ein Stück bin Ich nun weiter mit einem anderen Ansatz.
Zunächst habe Ich einen Subsriber erstellt der beim Laden des Plugins ausgeführt wird.
Dort weise Ich dann über den Context eine Extension zu mit den gewünschten Daten.
public static function getSubscribedEvents(): array {
// Return the events to listen to as array like this: =>
return [
PluginEvents::PLUGIN_LOADED_EVENT => 'onPluginLoad'
];
}
public function onPluginLoad( EntityLoadedEvent $event ) {
$context = $event->getContext();
$array = new ArrayEntity();
$array->set("test", "testvalue");
$context->addExtension("testvar", $array );
}
Leider kann Ich die Daten im Twig Template noch nicht abrufen.
In der Konsole wird immer ein Reference Error ausgegeben z.B. ReferenceError: page is not defined
Ich habe verschiedene Schreibweisen separat getestet, aber die Variable scheint noch nicht aktiv zu sein.
Test: {{ page.extensions.testvar.test }}
Test: {{ extensions.testvar.test }}
Test: {{ testvar.test }}
Nun die Fragen:
-
Gib es einen besseren Weg eine Extension anzufügen (aktuell wird der Code bereits beim Starten vom Adminbereich ausgeführt). Ich möchte den Code eigentlich nur ausführen wenn mein Plugin aufgerufen wird. (ggf. ein anderes Event oder es gibt eine Abfrage im Subscriber ob das eigene Plugin aufgerufen wird).
-
Wie kann ich die Extension im Twig-Template abrufen und wie ermittle Ich den genauen Pfad zur Extension? Habe Beispiele gesehen mit page.footer.extensions, wann nutzte Ich welchen Pfad?
-
{{ dump() }} funktioniert bei mir noch nicht. “TypeError: Window.dump: At least 1 argument required”. Gibt es eine alternative Methode um alle verfügbaren Variablen eines Templates zu ermitteln.
Danke und Grüße,
Ben