Produkt als SalesChannelProductEntity bekommen

Hallo,

ich bekomme über das product.repository und über
$this->productRepository->search(new Criteria([$productID]), $context)->first();
ein Produkt, das ich später über eine Twig Funktion in meinem Template als return bekomme.

Nun bekomme ich das Produkt als ein ProductEntity Objekt, benötige aber eigentlich ein klassisches SalesChannelProductEntity. Wie bekomme ich stattdessen mein Produkt als SalesChannelProductEntity?

Stehe da leider immer noch am Schlauch und würde mich für ein paar Denkanstöße oder Lösungsvorschläge sehr freuen. Danke :slight_smile:

Lg Alex

Habe jetzt mal versucht das ganze statt dem product.repository als EntityRepositoryInterface über sales_channel.product.repository und SalesChannelRepositoryInterface aufzubauen und statt einem regulären Context mit einem SalesChannelContext.

Mit instanceof frage ich den korrekten Typen ab, alles soweit funktionierend.
Ich packe das ganze in eine Twig Excention, der ich einmal eine ID und context übergebe.

public function getFunctions()
{
 return [
                new TwigFunction('getProductByID', [$this, 'TwigGetProductByID']),
            ];
        }

 public function TwigGetProductByID($productID, SalesChannelContext $salesChannelContext):SalesChannelProductEntity
            {
                if ($this->salesChannelProductRepository instanceof SalesChannelRepositoryInterface)
                {
                    if ($salesChannelContext instanceof SalesChannelContext)
                    {   
                        $productByID = new GetProductsByID($this->salesChannelProductRepository, $salesChannelContext); //Instanzierung meiner Klasse, die das Produkt holt
                        $product = $productByID->getProduct($productID); // Produkt erhalten
                        //print_r($product); -> Listet den Inhalt des gesamten SalesChannelProductEntity auf
                        return $product;
                    }
                } 
            }

Das print_r($product) gibt mir noch schön das gesamte SalesChannelProductEntity Objekt aus. Rufe ich das ganze aber dann in meinem Template auf, bekomme ich nur ein Objekt mit dem Produktnamen und dem Charset.

{% set product1 %}
{{ getProductByID('2a88d9b59d474c7e869d8071649be43c', context) }}
{% endset %}
{{ dump(product1) }}

Meine services.xml sieht so aus:

<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    <services>
        <service id="Bs\TwigGetProduct\Storefront\Pagelet\Header\Subscriber\AddTwigFunction">
            <tag name="twig.extension"/>
            <argument type="service" id="sales_channel.product.repository"/>      
        </service>
    </services>
</container>

Jemand eine Idee, wieso er mir das ganze Objekt nicht zurück gibt, sondern nur Name und Zeichensatz?

Twig\Markup {#2192 ▼ -content: „Main product\n“ -charset: „UTF-8“ }

Lg Alex

1 „Gefällt mir“

Es liegt anscheinend nur an der Zuweisung meiner Variable. Wenn ich
{{ dump( getProductByID(‚2a88d9b59d474c7e869d8071649be43c‘, context) ) }}
schreibe, dumped er das gesamte SalesChannelProductEntity korrekt. Wenn ich es über set mache, wandelt er es in ein Twig/Markup bzw. String um.

Wie setze ich da die Variable korrekt?

LG Alex