Grüße! Ich bin Aneesh Sreedharan, CEO von 2Hats Logic Solutions. Bei 2Hats Logic Solutions widmen wir uns der Bereitstellung von technischem Fachwissen und der Lösung Ihrer Probleme in der Welt der Technologie. Unsere Blog-Seite dient als Ressource, in der wir Einblicke und Erfahrungen teilen und wertvolle Perspektiven auf Ihre Fragen bieten.
Aufgrund der Komplexität erlaubt Shopware nicht die Anzeige aller Komponenten auf der Plugin-Konfigurationsseite. Stattdessen empfiehlt Shopware die Erstellung benutzerdefinierter Module, um diese Komponenten innerhalb von Plugins effektiv zur Geltung zu bringen. Obwohl die Erstellung unserer benutzerdefinierten Module eine Option ist, ist es wichtig zu beachten, dass dieser Ansatz zeitaufwändig sein kann. Alternativ können wir benutzerdefinierte Komponenten innerhalb der Plugin-Konfiguration verwenden, um die spezifischen Anforderungen unseres Plugins effizienter zu erfüllen. In diesem Blogbeitrag werden wir uns eingehend mit einer detaillierten Anleitung befassen, wie Sie mithilfe benutzerdefinierter Komponenten Nachrichten elegant anzeigen und API-Aufrufschaltflächen in der Plugin-Konfiguration implementieren können.
Gut aussehende Nachrichten
In unseren Plugins nutzen wir häufig Snippets, um Übersetzungen in Textelemente einzubinden. Um diese Snippets innerhalb des Plugins ansprechend und informativ darzustellen, können wir benutzerdefinierte Komponenten verwenden. Zuerst müssen wir wie unten beschrieben eine benutzerdefinierte Komponente zur Konfigurationsseite des Plugins hinzufügen.
1 2 3 4 5 6 7 | <card> <title>Info</title> <title lang="de-DE">Info</title> <component name="snippet-info"> <name>snippetInfo</name> </component> </card> |
Der nächste Schritt besteht darin, die Komponente in die Verwaltung zu importieren. Importieren Sie die Komponente in die Datei main.js im Ordner src/Resources/app/administration/src/.
1 | import './component/snippet-info' |
Fügen Sie in der Datei snippet-info/index.js den unten genannten Code hinzu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | const { Component, Context } = Shopware; import template from './snippet-info.html.twig'; import './snippet-info.scss'; import deDE from './snippet/de-DE.json'; import enGB from './snippet/en-GB.json'; Component.register('snippet-info', { Template, methods: { goToSnippetManager() { const adminPath = Context.api.uri; const emailTemplatePath = `${adminPath}#/sw/settings/snippet/detail/general.message`; window.open(emailTemplatePath, '_blank'); } }, { 'de-DE': deDE, 'en-GB': enGB }, }<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span> |
Wir können den benutzerdefinierten Komponenten Snippets und Stile hinzufügen und müssen sie importieren, um sie im Plugin zu verwenden. Wir können unsere Nachrichten zur Twig-Datei hinzufügen, sie als Vorlage importieren und bei der Komponente registrieren. Die Stile, die wir in der SCSS-Datei hinzugefügt haben, werden in dieser Vorlage verwendet, damit wir gut aussehende Nachrichten in Plugin-Konfigurationen anzeigen können. Unten finden Sie eine Vorlage für eine Twig-Datei.
1 2 3 4 5 6 7 8 9 10 11 12 | <div class="alert alert-success"> <div style="display:flex"> <div class="alert-icon"> <span>!</span> </div> <div> <strong>{{$t(translations_info.translations')}}</strong> <p>{{$t(translations_info.note')}} <a href="javascript:;" @click="goToSnippetManager">{{$t(translations_info.link')}}</a></p> </div> </div> </div><span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span> |
Jetzt müssen Sie die Administration mit dem Administrations-Build-Befehl erstellen, um die Änderungen zu sehen. Die Plugin-Konfiguration sieht wie im folgenden Screenshot aus. Wenn Sie auf das Snippet „Gehe zu“ klicken, wird zur Bearbeitungsseite des Snippets „ general.message “ weitergeleitet, das wir in den Komponenten-Snippets hinzugefügt haben.
API-Testschaltflächen
Mit den benutzerdefinierten Komponenten können wir API-Testschaltflächen in der Plugin-Konfiguration hinzufügen. Fügen Sie dazu in der Datei config.xml den folgenden Code hinzu.
1 2 3 | <component name="api-test-button"> <name>ApiTest</name> </component> <span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span |
Importieren Sie in der Datei main.js unter /src/Resources/app/administration/src unseren Komponentenordner.
import ‘.component/api-test’;
Fügen Sie innerhalb der Komponente/api-test/api-test-button.html.twig die Vorlagendatei wie unten beschrieben hinzu
1 2 3 4 5 6 7 8 9 | <div style="display: block; margin-bottom: 20px;font-size:14px;text-align:right"> <sw-button-process :isLoading="isLoading" :processSuccess="isSaveSuccessful" @process-finish="saveFinish" @click="checkApi"> {{ $t('general.test_api') }} </sw-button-process> </div> |
Importieren Sie in der Datei main.js unter /src/Resources/app/administration/src unseren Komponentenordner.
import ‘.component/api-test’;
Fügen Sie innerhalb der Komponente/api-test/api-test-button.html.twig die Vorlagendatei wie unten beschrieben hinzu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | const { Component, Mixin } = Shopware; import template from './api-test-button.html.twig'; import deDE from '../snippet/de-DE'; import enGB from '../snippet/en-GB'; Component.register('wp-api-test-button', { template, mixins: [ Mixin.getByName('notification') ], snippets: { 'de-DE': deDE, 'en-GB': enGB }, data() { return { isLoading: false, isSaveSuccessful: false }; }, methods: { saveFinish() { this.isSaveSuccessful = false; }, checkApi() { this.isLoading = true; var postApiUrl = 'https://jsonplaceholder.typicode.com/posts'; //dummy API URL this.sendGetRequest(postApiUrl) .then(data => { if (data.length > 0) { this.createNotificationSuccess({ message: this.$tc('general.api_url_is_valid') }); } else { this.isLoading = false; this.createNotificationWarning({ message: this.$tc('general.api_url_is_not_valid') }); } }); }, sendGetRequest(url) { return fetch(url) .then(response => { if (!response.ok) { this.isLoading = false; this.createNotificationError({ message: this.$tc('general.api_url_is_not_valid') }); } else { return response.json(); } }) .catch(error => { this.isLoading = false; this.createNotificationError({ message: this.$tc('general.api_url_is_not_valid') }); }); } } |
Hier sendet die SendGetRequest-Funktion die API-Anfragen und gibt die Antwort zurück. Durch die Überprüfung der Antworten können wir Benachrichtigungen mit den Funktionen createNotificationSuccess oder createNotificationError anzeigen. Wir müssen die Administration mit dem Administrations-Build-Befehl erstellen, um die Änderungen zu sehen.