Ich habe eine Emotionskomponente für die Shopping-Welten mit dem Shopware 5.2 Plugin System erstellt Meine Komponente funktioniert ganz gut. Allerdings möchte ich gern die Konfigurationsform der Emotionskomponente übersetzbar haben. Ich konnte keine Dokumentation finden, noch irgendwelche Fragen / Antworten mit Google in Bezug auf diesen Fall. Ich kann ganz einfach die Konfigurationsoptionen des Plugins mit der Datei config.xml übersetzen, aber die Emotionskomponente scheint keine Übersetzungen so direkt zuzulassen. Hier ist der essentielle Teil meines Emotions-Plugins
custom/plugins/MyxEmotion/MyxEmotion.php
class MyxEmotion extends Plugin
{
...
public function install(InstallContext $context)
{
$this->createEmotionComponent();
return true;
}
public function createEmotionComponent()
{
/** @var \Shopware\Components\Emotion\ComponentInstaller $installer */
$installer = $this->container->get('shopware.emotion_component_installer');
$component = $installer->createOrUpdate(
$this->getName(),
'Myxemotion',
[
'name' => 'Myxemotion',
'template' => 'myx_emotion',
'xtype' => 'myx-emotion',
'cls' => 'myx-emotion',
'description' => 'A emotion component element for the shopping worlds.'
]
);
$component->createTextField([
'name' => 'level1_background_image_url',
'fieldLabel' => 'Level 1 background image URL',
'supportText' => 'To show a background image',
'defaultValue' => 'http://...',
'allowBlank' => false
]);
...
custom/plugins/MyxEmotion/Resources/snippets/backend/emotion/view/components/myx_emotion.ini
[En_US]
morelink = '"More..." link, destination'
level1_background = 'Display level 1 background image ?'
[De_DE]
morelink = '"Mehr..." link, destination'
level1_background = 'Display Level 1 hintergrundbild?'
custom/plugins/MyxEmotion/Resources/views/emotion_components/backend/myx_emotion.js
//{namespace name=plugins/backend/emotion/view/components/myx_emotion}
Ext.define('Shopware.apps.Emotion.view.components.MyxEmotion', {
extend: 'Shopware.apps.Emotion.view.components.Base',
alias: 'widget.myx-emotion',
/**
* The constructor method of each component.
*/
initComponent: function () {
var me = this;
me.callParent(arguments);
}
});
Nach der Installation des Plugins, wenn ich mir die Snippets anschaue, finde ich die Übersetzungen in der Ini-Datei. Aber wie kann ich diese Snippets mit meinen Werten in der Konfiguration der Emotionskomponente verbinden? Das scheint so eine triviale Sache zu tun, aber ich kann keine Dokumentation finden, wie man es wirklich macht.
Hallo,
Du kannst in den JavaScript Plugin Dateien ganz normal Smarty benutzen. Das heißt, Du kannst wie sonst üblich in einem Theme auch mit
var snippet = "{s name='morelink'}{/s}";
beispielsweise arbeiten. Du kannst Dir auch als Hilfestellung die offiziellen Emotion Widgets ansehen, wie z. B. den Artikel Slider. Zu finden unter themes/Backend/ExtJs/backend/emotion/view/components/article_slider.js
Dort unter dem object key snippets.
PS: Falls Du komische JavaScript Fehler bekommen solltest oder einfach gar keine Fehler und es geht trotzdem nicht, dann liegt es meist daran, dass Smarty versucht etwas zu parsen, was jedoch gar nicht als Smarty Code gedacht ist. Deswegen empfiehlt es sich immer solche speziellen JavaScript Ausdrücke mit einem {literal} zu umschließen. Alles darin ignoriert der Smarty Compiler. Ähnlich wie das pre Tag in HTML.
MFG
derwunner
Wie kann ich die Werte für statusText und fieldLabel in meinem jQuery Plugin setzen? (**custom/plugins/MyxEmotion/Resources/views/emotion\_components/backend/myx\_emotion.js)** In der initComponent function **i** ch habe diese methode versucht, es hat einfach nicht gearbeitet für mich. Ich mache wohl etwas falsches.
Bin ich meinen Namespace richtig erklären? Soll ich dort noch einen anderen Namespace benutzen? Soll ich den Namespace im {s} Tag verwenden? Kannst du mir bitte mit Code zeigen?
Ich habe schon versucht, die Snippets in der PHP-Funktion (**custom/plugins/MyxEmotion/MyxEmotion.php)**, wo ich die Emotion-Komponente erstellen, aber es funktioniert nicht
In der alten Art von Plugins, vor Shopware 5, mit der Bootstrap-Datei sah es so viel einfacher als jetzt
Ich habe das Problem gelöst. Ich bin mir ziemlich sicher, dass dies für andere Entwickler hilfreich sein wird, die das Gleiche erreichen wollen wie ich, also hier ist was ich tat: Anscheinend, wenn du die Emotionskomponente erstellen willst, musst du es in der Plugin-Datei (PHP) erstellen, genau wie ich es gemacht habe, dann wenn du die Felder (fieldLabel und supportText) aus der Emotion-Konfiguration übersetzen möchtest, dann musst du gehen zu der Extjs-Datei, wo die Komponente deklariert ist und mit den Konfigurationsfeldern dort interagieren. Grundsätzlich musste ich einen Snippets-Bereich zur deklaration der Komponente hinzufügen, die die Snippets als Strings enthält, dann musste ich in der initComponent-Funktion das Objekt der Komponente analysieren, auf die Items und deren Eigenschaften zugreifen und ihnen die im Snippets-Abschnitt deklarierten Snippets zuordnen . Obwohl ich meine Snippets ursprünglich in der oben beschriebenen Dateistruktur in der Frage deklariert habe, schildert Shopware scheinbar den Code des Plugins, der nach Snippets-Strings sucht und sie in die Datenbank einfügt und erst danach nach Ini-Dateien sucht, die Snippets enthalten. Aus diesem Grund wurde meine ini-Datei veraltet, weil die gleichen Snippets, die ich in der Datei js deklarieren musste, auch in der ini-Datei deklariert wurden. Also ignorierte Shopware die ini-Datei, da die Snippets bereits im DB waren, als er in die ini-Datei kam . Im Einklang habe ich die Ini-Datei aus meinem Plugin entfernt, weil es nutzlos war. Vielen Dank für Ihre Hilfe derwunner
Mein Deutsch ist nicht sehr gut, ich benutze Google translate, also bitte vergib mir meine Kommentare für ihre Syntax und Grammatik