einfüge, passiert logischerweise gar nichts, denn es fehlen die Konfigurationen, die man per Erlebniswelt vornehmen kann (welche Produkte, usw).
Mein Ziel ist es, auf der „Homepage“ Produkte mit einem bestimmten Tag anzuzeigen. Per Erlebniswelt würde man das wahrscheinlich über die „Dynamische Produktgruppe“ lösen. Ich würde es aber gerne direkt in meinem Theme im TWIG Template verankern.
du kannst die Templates wie gewohnt inkludieren. Wichtig ist hierbei, dass du dem Slider die entsprechenden Konfigurationen mit gibst, siehe dir als Beispiel das „Page/product-detail/Cross-Stellung/tabs.html.twig“ Template an.
Die gewünschten Produkte usw. könntest du ggf. über einen Subscriber zuweisen.
und in einem Subscriber (der auf ein Event hört, z.B. CmsPageLoaded) ganz einfach meine Produkte laden.
Könntest du mir noch auf die Sprünge helfen, wie ich diese dann in die sliderConfig bekomme? Wahrscheinlich müssen sie in das „element“ Objekt, nehme ich an? Wie würde ich das im Subscriber genau bewerkstelligen?
@zlep, je nach Anwendungsfall würde ich den StorefrontRendererEvents verwenden. Hier kannst du das Event um Parameter erweitern, z. B. zlebProducts und kannst dann im Template mit zlebProducts auf den Parameter zugreifen. Wichtig wäre hier, dass deine Änderungen also das hinzufügen des Parameters nur bei bestimmten Views passiert, damit nicht auf jeder Seite der Code ausgeführt wird.
Statt item->getProducts() verwendest du dann zlebProducts z. B.
@zlep , genau so oder so ähnlich.
Wenn keine Einschränkung vorhanden ist, wird überall im Storefront dein Code ausgeführt, was zu Performance Einbußen und somit lange Ladezeiten führen kann.
@abdullah
Sorry, bin erst jetzt dazu gekommen.
Also, das Problem bleibt, dass auch wenn ich die ProductCollection zuweise, der Preis als auch das Artikelbild fehlen:
Für den Slider würde man aber noch {% set cover = product.cover.media %} für die box-standard.html.twig sowie {% set real = product.calculatedPrice %} für die price-unit.html.twig benötigen.
Ganz davon abgesehen, verstehe ich aber sowieso nicht, wieso die ProductCollection kein Preis (calculatedPrice) und Bild (cover.media) mitliefert? Wo bekomme ich diese Infos denn her?
@zlep wie bereits @Max_Shop erwähnt hat, musst du die gewünschten Associations deinem Criteria hinzufügen. In Shopware werden die Associations standardmäßig nicht mit geladen.
Danke euch.
Das Cover-Bild konnte ich mit $criteria->addAssociation('cover'); nun mitgeben. Preise haben allerdings leider nicht funktioniert. War mir nicht ganz klar, wie ich den calculatedPrice mitgeben kann. Den gibt es nämlich nicht in Shopware\Core\Content\Product\ProductDefinition oder übersehe ich etwas?
Bin nun aber einen (ganz) anderen Weg gegangen. Und zwar ist im sales_channel.product.repository (anstatt dem normalen product.repository) schon alles mit dabei, was man benötigt. Siehe Shopware\Core\Content\Product\SalesChannel\SalesChannelProductDefinition.
Wichtig ist nur, dass das das SalesChannelRepositoryInterface (anstatt dem EntityRepositoryInterface) benötigt sowie aus dem Event den $event->getSalesChannelContext().
Nun scheint tatsächlich alles zu funktionieren.
Danke euch noch mal für eure Unterstützung.
Hm, ein bisschen eine Never-Ending-Story. Ein weiteres Problem ist aufgetaucht, und zwar, dass die Produkte manchmal angezeigt werden und manchmal nicht. Ich habe die Vermutung, dass es irgendwie mit dem Cache zu tun haben könnte bzw., dass die Search-Query zu lange dauert und die Seite bis dahin schon geladen wurde.
Mir fehlt gerade ein bisschen der Ansatz, das Problem zu lösen. Jemand noch eine Idee?
@zlep, der PHP Teil sollte noch vor dem Rendern der Seite zu einem Ergebnis kommen, daher denke ich nicht, dass die Search-Query zu lange braucht.
Hast du mal versucht die Daten zu loggen (PHP-seitig und ggf. mit einem dump im Template)?
Ich denke nicht, dass Cache das Problem verursacht, wenn du den SalesChannelRepository verwendest. Meiner Meinung nach sollte das Problem wo anders liegen.
Zum Laden von (List)Produkten verwende ich die ProductListRoute, die macht nichts anderes als ein SalesChannelRepository zu benutzen.
Wenn du die Produkte einer bestimnten Kategorie laden möchtest und die Kategorie kennst, kannst du auch die (Cached)ProductListingRoute verwenden.
@zlep
ich bin mir nicht mehr sicher, aber ich glaube ich hatte früher mal auch Probleme beim Vergleich vom Tag Namen.
Ich habe dann die Tag-ID verwendet. Bei der Verwendung der Tag-ID hatte ich dann keine Probleme mehr.