Daten Anfragen über Repository oder API

Hallo zusammen,

ich programmiere gerne Templates in Shopware 6 und stoße dabei immer wieder auf fehlende Daten auf bestimmten Seiten.

Z.B. werden Daten zum Herateller im CMS Element „Cross Selling“ standardmäßig nicht geliefert (product.manufacturer.name) oder Daten zum Bestand von allen Varianten im Listing. Aber auch an vielen anderen Stellen fehlen relevante Daten.

Mein Ziel ist es, Datenabfragen ggü. Der Datenbank zu machen, aber innerhalb meines Template „Plugins“. Also kein neues Plugin.

Nun kann man die Daten ja entweder über die REST API oder mittels PHP über das entsprechende Repository abfragen.

Für mich stellen sich daher folgende Fragen:

Welche dieser beiden Methoden ist hinsichtlich Nutzbarkeit, Sicherheit und Last (z.B. in Schleifen) besser?

Wie gehe ich vor, wenn ich das Produkt Repository abfragen und in Twig nutzen will?

Wie frage ich die REST API ab, ohne, dass ich die Authentifizierung (z.B. API Key) im Frontend preisgebe?

Ich würde mich sehr freuen, wenn ich mit eurer Unterstützung meine erste Abfrage schaffen würde. Ich habe basierend auf den Docs von Shopware bereits einige erfolglose Versuche hinter mir, sehe diese Fähigkeit aber als fundamental an und wäre sehr dankbar für eine begleitende Unterstützung zum Ziel.

Hallo,
das geht konzeptionell nicht. Entweder es gibt ein Twig Template indem Daten angezeigt werden und dann braucht es irgendwo einen Weg die Daten in das Template zu bekommen.

Die Alternative wäre halt die API, aber halt mit dem Nachteil, dass hier die Authentication im JavaScript steht. Mal abgesehen vom extra Call, der ja immer gemacht werden muss, auch bei gecachten Seiten …

Der Weg, um die Daten in das Twig Template zu bekommen, sollte nach meiner Recherche eben durch die zwei Methoden (API Call oder Repository) möglich sein. Für mich stellt sich also nicht die Frage ob, sondern wie und was ist besser.

Die Daten für die Authentifizierung dürfen natürlich auf keinen Fall sichtbar für Dritte sein. In normalen Serverumgebung kann man hierzu z.B. die sog. Umgebungsvariablen nutzen. Geht so etwas auch in Shopware 6?

Hast du zufällig eine funktionierende Anleitung, um Produktdaten im Twig Template bereitzustellen? (Z.B. durch uuid Abfrage).

So erstmal die Minimal Version eines Subscribers
da fehlen aber noch die use statements und das ganze müsste in ein eigenes Plugin.

<?php
namespace mein_plugin\Subscriber;

// hier braucht es die genutzten typen
// use ... 

class RenderStorefrontSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [StorefrontRenderEvent::class => "onStorefrontRenderEvent"];
    }

    public function onStorefrontRenderEvent(StorefrontRenderEvent $event){
        $event->setParameter("variablen_name_in_twig", "BratwurstMitSenf");
    }
}

Im Template gibst Du dann im Template hiermit : {{$variablen_name_in_twig}}, den Text „BratwurstMitSenf“ aus. So ähnlich mache ich das immer wenn es darum geht irgendwelche Daten in allen Template bereit zu stellen.

In anderen Fällen braucht man die Daten vielleicht nur in an wenigen Stellen (=in wenigen Templates), dann könnte man auch andere Stellen überschreiben.

Jetzt brauchst Du noch den Daten Zugriff. Und das ginge dann zunächst via Dependency Injection für das Repository und dann dem Abruf der Daten.

1 „Gefällt mir“