Plugin-Config an Javascript übergeben?

Hallo,

ich habe ein Plugin welches eine Einstellmöglichkeit bietet und eine dazugehörige Javascript-Funktion mitbringt.

Mein Javascript registriere ich im Plugin via Theme_Compiler_Collect_Plugin_Javascript

allerdings müsste ich die eingestellten Settings als Variablen in meine Javascript-Funktion kriegen… wie schaff ich das denn?

 

An anderer Stelle habe ich bereits das hier gefunden: var config = "{config name=‘meine-config’ namespace=‘MeinPlugin’}";

leider funktioniert das nicht… es wird einfach als Stringwert verwendet … habs im Javascript eingebunden.

Das ist tatsächlich n großes Problem. Mir fällt leider nur eine wirklich dreckige Lösung dafür ein. Du könntest den Block frontend_index_header_javascript in einem deiner Templates erweitern und sie dort mit {config} reinschreiben. Das ist aber eigtl sehr sehr unschön.

Also hab ich die Auswahl zwischen „keiner Lösung“ und einer „unschönen Lösung“ ?

immerhin zwei optionen :smiley:

Es kommt ein bisschen drauf an was dein JavaScript macht. Wenn du ein Shopware JQuery Plugin geschrieben hast, wird das ja über einen Selector an einen Teil in deinen DOM gebunden. Dort kannst du über die data Attribute dein JQuery Plugin konfigurieren. Die data Attribute stehen ja auch in irgend einem Template. Da könntest du wiederum den {config} Viewhelper verwenden. Das wäre auch einen sauberer Weg. Vielleicht passt das ja zufällig zu deinem Szenario.

1 „Gefällt mir“

Nur kurz ergänzend:

Der Code_ „{config name=‚meine-config‘ namespace=‚MeinPlugin‘}“;_ funktioniert nur in Javascript-Dateien, die auch von Smarty geparsed werden.
Der {config} Aufruf ist nunmal Smarty.
Wenn du also dein Javascript über dein Plugin registrierst, so wird dein Javascript-Code auch nicht von Smarty geparsed.
Ein Unterschied wäre es nun, wenn du dein Javascript über ein eigenes Script-Tag direkt in deine .tpl-Datei packen würdest.
Davon möchte ich aber abraten, auch wenn dies funktionieren würde!

Der korrekte Weg wäre, wie bereits von @arnebecker‍ erwähnt, der Weg über Data-Attribute.
Alternativ kannst du auch deine gesamte Config per JSON-Encode in einen String packen und diesen dann in ein beliebiges HTML-Attribut packen.
Wichtig ist dann nur, dass du dies auch entsprechend escapest:
 

In deinem Javascript-Code kannst du das Div anschließend über die Klasse / ID identifizieren und das data-Attribut auslesen.
Aber auch hier gilt:
Dies ist nur dann zu nutzen, wenn der zuvor genannte weg von Arne nicht funktioniert / anwendbar ist.

Gruß,
Patrick  Shopware

2 „Gefällt mir“

Ich strebe an, dass das Plugin unabhängig von irgendwelchen HTML-Elementen ist.

Ich möchte keine bestehenden HTML-Elemente mit Attributen versehen, da diese ggf. selbst wieder aus verschiedenen (unbekannten) Plugins oder Themes kommen.

Du könntest deine Configs auch per AJAX-Request ins Javascript laden.

Viel mehr Möglichkeiten hast du dann bald aber nicht mehr.

1 „Gefällt mir“

Wie schon Patrick dies schon angesprochen hat, eventuell mit Ajax laden. 
Oder auch in einem Block in dem Javascripte geladen werden, als Variablen zur Verfügung stellen auf die du dann zurückgreifen kannst.

Beispiel :

 

{block name="frontend_index_header_javascript" }



    {$smarty.block.parent}



    

var test = "{$config.deinevariable}";




{/block}