Medienorder in Admin-Plugin abrufen / erstellen

Hallo, ich will aus dem Adminbereich per Javascript auf Medienordner zugreifen, genauer gesagt einen Medienordner erstellen wenn dieser noch nicht existiert und ihn dann für eine sw-media-upload-v2 Komponente verwenden. Wenn ich bei der Komponente den Namen eines nicht existierenden Ordners angebe, passiert einfach nichts.

   <sw-media-upload-v2 ... defaultfolder="MeinOrdner">

Habe dazu aber nichts finden können. Eine mögliche Lösung wäre per HTTP-Anfrage an entsprechende APIs, aber irgendwie funktioniert das auch mit dem HTTP-Client nicht. Ich habe das so versucht:

 const httpClient = Shopware.Service('httpClient'); // HTTP-Client abrufen

  const response = await httpClient.post('/api/search/media-folder', {
      filter: [{ type: 'equals', field: 'name', value: folderName }],
      limit: 1,
  });

der httpClient bleibt da aber immer undefined.

Hat jemand irgendeinen Hinweis wie man das machen kann?

Hast du ein eigenes Modul für die JS-Datei erstellt? So sieht das irgendwie falsch aus - also zumindest für mich.

Ja es ist eine vue-Komponente die ich registriert hab, der restliche Code funktioniert auch soweit aber das mit dem Medienordner kriege ich nicht hin.

Da weiß ich ehrlich gesagt nicht, wie genau das alles strukturiert werden soll. Habe bisher nur in JS bzw. TS gearbeitet.

Ich schätze aber mal, wenn der HttpClient undefined ist, dass der Aufruf falsch ist.

Wenn du den httpClient wie folgt aufrufst, funktioniert es dann?

const httpClient = Application.getContainer('init').httpClient

Mit vorherigem Import natürlich

const { Application} = Shopware;

Oder so?

import HttpClient from 'src/service/http-client.service';
const httpClient = new HttpClient();
1 Like

Ok damit funktioniert es erstmal, danke. Jetzt muss ich noch rausfinden wie ich mit diesem API-Call die ID zurückbekomme von der Konfiguration die da in der DB erzeugt wird. Der Call gibt nämlich nichts zurück.

  const configResponse = await httpClient.post('/media-folder-configuration', {
                createThumbnails: true,
                thumbnailQuality: 80,
                keepAspectRatio: true,
            },
            {
                headers: {
                    Authorization: `Bearer ${accessToken}`,
                },
            });

Der Pfad ist vermutlich falsch. Versuch es mit /search/media-folder-configuration

Ne search ist nur für das abrufen der Ordner, aber ich will ja einen neuen Ordner anlegen und muss dafür erst diesen db-Eintrag für die Configuration erstellen.

edit: hat jetzt alles funktioniert. Bisschen seltsam dass man erst eine MediaFolderConfiguration in der DB anlegen muss bevor man einen MediaFolder erstellt, aber jetzt geht es.