Bild HINZUFÜGEN bei Pseudo Produkten im Warenkorb, Plugin

Hallo,

ich habe ein Plugin geschrieben, welches gelieferte Pseudo Produkte in den Warenkorb legt.

$item->setLabel($label);
$item->setPriceDefinition($priceDefinition);
$item->setPrice($calculatedPrice);
$item->setPayloadValue("price", $price);
$item->setRemovable(true);
$item->setStackable(true);
$item->setGood(true);
$item->setPayloadValue("linkedProduct", $linkedProduct);

Funktioniert wie es soll.

Nun würde ich gern noch ein Bild URL mitliefern, so dass die Produkte im Warenkorb ein Bild bekommen.

Gern auch einen Link zu einer Doku, denn selbst da finde ich nix.

So was klappt schon mal nicht

$item->setCover("0192edbc7c7472668446449d426e7c9d");
$item->setPayloadValue(cover, [media => [url => https://www.abc.de/poolueberdach-casablanca-infinity-a.jpg]]);

Danke

Nicht getestet, müsste ich tippen, würde ich sagen: Bild nicht dynamisch zuordnen sondern eines aus Media auswählen. Falls es nur dynamisch geht, dann zuvor in Media speichern und dann über dessen uuid zuordnen.

Das versuchte ich ja mit
$item->setCover("0192edbc7c7472668446449d426e7c9d");

Jetzt hab ich gefunden, dass es vermutlich so heißen muss
$item->setCoverId("0192edbc7c7472668446449d426e7c9d");
Geht aber auch nicht.

Und das auch nicht
$item->setPayloadValue("coverId", "0192edbc7c7472668446449d426e7c9d");

Füge es jetzt so hinzu.
$item->setPayloadValue("imageUrl", "https://www.abc.de/bild.png");

Wobei imageUrl einfach ein Bezeichner ist.

Und habe noch die Datei zum Überschreiben angelegt.

{% sw_extends '@Storefront/storefront/component/line-item/type/generic.html.twig' %}

{% block component_line_item_type_generic_image %}
	<div class="col-auto line-item-info-img">
		<div class="line-item-img-container">
			{% if lineItem.payload.imageUrl is defined %}
				<img src="{{ lineItem.payload.imageUrl }}" alt="{{ lineItem.label }}" class="line-item-image">
			{% else %}
				{{ parent() }}
			{% endif %}
		</div>
	</div>
{% endblock %}

Und wie machst du das in der E-Mail? Dort müsste ja auch das Bild erscheinen.

Nur abfragen ob das eigentlich Bild da ist, sonst das andere anzeigen lassen, wenn es existiert.

{% if nestedItem.cover is defined and nestedItem.cover is not null %}
	<img src="{{ nestedItem.cover.url }}" width="75" height="auto"/>
{% elseif lineItem.payload.imageUrl is defined %}
	<img src="{{ lineItem.payload.imageUrl }}" width="75" height="auto"/>
{% endif %}

Achso, verstehe, Danke dir!

Diesen Punkt hatte ich auch getestet:

$media_id = '0196ec54412d736a8aefb476007b1272';
$cover = $this->mediaRepository->search(new Criteria([$media_id]), $context->getContext())->first();
...
$productLineItems->setCover( $cover );

Problem, die Variable „$cover“ ist ohne Inhalt. Die Media_ID ist aber korrekt.

$item->setPayloadValue("imageUrl", "https://www.abc.de/bild.png");
Das habe ich gemacht, weil ich an die eigentlichen Bildinfos schreibend nicht ran komme.

setCover klingt mir nach einer festen Eigenschaft, wie Preis.
Und da würde ich sagen, dass geht nicht.
Dafür muss was ganz anderes gemacht werden.

Deswegen mein einfacher Wert, in dem ich nur ein URL mitgebe, als Text.
Das Bild muss auch die ganze Zeit an dieser URL sein. Es ist wirklich nur ein Bezug.
Bei allem mit Media, wird das Bild in die Ordnerstruktur /ab/cd/01 eingebracht und über die DB gespeichert. mit allem drum und dran.