Shoplogo via Shopware API auslesen

Hallo in die Runde,

leider wurde mein letzter Thread zu diesem Thema autom. geschlossen, da dieser 30 Tage keine Antwort hatte. Komische Funktion, aber gut, aus diesem Grund hier einmal neu.

Ein anderer Nutzer namens Alex hatte mir bereits die Lösung geschildert:

@MrAle

als erstes liest du per /api/sales-channel deine Sales Channels aus. Wähl den aktuellen welchen du nutzt. Und hol dir dort deine Theme Id.
Mit der Theme Id stellst du dann eine Anfrage an /api/theme/{id} und du bekommst deine Werte wie zB. sw-logo-mobile zurück.
Hoffe das hilft erstmal :slight_smile:

In der Realität stimmt das schon fast, jedoch habe ich dadurch nur die media-id. Diese media-id muss ich jetzt in einen weiteren Endpunkt eingießen: GET http://my-shop-url/api/media/{id}

Und DANN habe ich die URL des Logos. In diesem ganzen Prozess vergehen mal mindestens 1 Sekunde, heißt damit kann ich nicht arbeiten, das ist ja die totale Wartezeit. Gibt es hier keinen einfacheren Weg?

was ist das für eine Anwendung (Javascript/Browser oder PHP auf dem Server). Je nachdem kann man evtl. direkt auf die „PHP route“ gehen oder auf die DB …

Hey @chamaw ich baue aktuell einen Shopware headless client, sodass man den headless channel im Shopware einfach in jedes beliebige JS Framework einbinden kann.

Ich denke es macht dann sicher Sinn erstmal auf der Serverseite die Daten zu aggregieren und zu cachen.
Ich würde das alles in ein Package packen, welches dann mit dem Headless Shopware kommuniziert.

Tatsächlich war dies nun auch meine letzte Lösung eine Art Datenset anhand der API über einen cronjob aufzubauen, auf welche ich dann locker flockig zugreifen kann. Macht es halt nur nicht ganz so easy und kopflos einsetzbar für andere Leute, aber darum soll es auch gar nicht gehen. Ist eher für den Eigengebrauch gedacht :).

Die ersten beiden Anfragen kann man tatsächlich noch kombinieren. Dann hat man zwar immer noch zwei, aber das ist denke ich besser als drei. :slightly_smiling_face:

In dem man eine Suchanfrage, mit den entsprechenden Associations, an die Sales Channel (POST /api/search/sales-channel) stellt, bekommt man für jeden abgefragten Channel unter ‚data‘ > ‚‘ > ‚extensions‘ > ‚themes‘ direkt das verbundene Theme mit.

Bei Bedarf kann man die Channels auch Filtern. Wenn man nur bestimmte oder einen haben möchte, kann man „ids“: „id|id|id“ mit beliebig vielen IDs in den Payload packen. Dann bekommt man auch nur diese zurück.

Beispiel:
POST https://mein-shop.de/api/search/sales-channel

{
    "ids": "ac03ad018bfd482ba1d2e3ae95e21284|ac03ad018bfd482ba1d2e3ae95e21284",
    "associations": {
        "themes": {
            "total-count-mode": 1,
            "media": {
                "total-count-mode": 1,
            }
        }
    }
}
1 Like

in anderen Systemen (z.B. in einer vue3 App) gibt es dann einfach eine JSON-Datei mit den Settings. Irgendwo muss ja eh stehen, wer den Aufruf macht und was die Url (des Headless Shopware Servers) ist. Genau da könnte man ja die Datei konfigurieren.

Wäre dies auch mit Kategorien möglich?
Ich habe hier folgenden Call, um eine CmsPage zu fetchen.

 /**
     * Fetches a page by ID from the Shopware 6 Store API.
     * @param {string} pageId - The ID of the page to fetch.
     * @returns {Promise<any>} A promise that resolves to the page data.
     */
    async fetchCmsPage(pageId: string): Promise<any> {
        try {
            const response = await this.axiosInstance.post(
                `/cms/${pageId}?associations[categoryIds][]`
            )
            return response.data
        } catch (error) {
            console.error(`Error fetching cms page: ${error}`)
            throw error
        }
    }

In einem der Blöcke bekomme ich einen productSlider zurück. Dieser Produktslider beinhaltet X Produkte mit categorieIds. Deswegen die association mit categoryId. Gibt es die Möglichkeit hier direkt etwas mitzugeben, dass ich die Klarnamen der Kategorien bekomme?