Produkt Eigenschaften im Listing / Get Article Properties in Listing

Hallo, 

Wie kann ich die Eigenschaften im Listing ausgeben? 

Wenn ich {{dump(product)}} mache, habe ich nur propertyIds. 

 

Mit freundlichen Grüßen

Amin Nayerhabibi

Du musst das Criteria-Objekt zum Auslesen der Produkte im Listing erweitern, um die Properties mit auszulesen.

@uehler schrieb:

Du musst das Criteria-Objekt zum Auslesen der Produkte im Listing erweitern, um die Properties mit auszulesen.

Kannst Du das evtl. ein wenig näher ausführen? Ich würde auch gerne im Listing auf die Properties zugreifen, Deine Antwort hilft mir aber leider nur bedingt weiter.

Hier: Shopware 6: Extending the storefront listing
Du erstellst einen Subscriber für ProductListingCriteriaEvent::class, im Callback machst du dann ein $criteria->addAssociation(‘property’);

sieht dann ungefähr so aus (ungetestet!)

class ExampleListingSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            ProductListingCriteriaEvent::class => 'handleRequest',
        ];
    }

    public function handleRequest(ProductListingCriteriaEvent $event)
    {
        $event->getCriteria()->addAssociation('property');
    }
}

 

3 „Gefällt mir“

@uehler‍ Weißt du vielleicht wie man die übersetzte Lables bei Zusatzfelder ausgeben kann, wenn der Zusatzfeld ein Auswahlfeld ist?? 

ich habe z.B. Zusatzfeld Baujahr und als Option habe ich 2010-2020 und die haben jeweils eine technischer Name und 2 Labels, wenn ich dump mache, bekomme ich nur die technische Name und nicht die Labels. 

Danke im Voraus. 

@uehler schrieb:

Hier: https://docs.shopware.com/en/shopware-platform-dev-en/how-to/extend-storefront-listing
Du erstellst einen Subscriber für ProductListingCriteriaEvent::class, im Callback machst du dann ein $criteria->addAssociation(‚property‘);

sieht dann ungefähr so aus (ungetestet!)

class ExampleListingSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
ProductListingCriteriaEvent::class => ‚handleRequest‘,
];
}

public function handleRequest(ProductListingCriteriaEvent $event)
{
$event->getCriteria()->addAssociation(‚property‘);
}
}

Ich habe das versucht so einzubauen, aber leider kommt im storefront nichts an. Ich habe meine Klasse über services.xml registriert und sie wird auch ausgeführt. Was könnte fehlen?

Edit: Habe ein paar Anpassungen gemacht. Jetzt läuft’s:

 

class ListingPropertiesSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            ProductListingCriteriaEvent::class => 'handleListingRequest',
        ];
    }

    public function handleListingRequest(ProductListingCriteriaEvent $event): void
    {
        $event->getCriteria()->addAssociation('properties');
    }
}

 

Moin @s_verweyen‍,

dank euerer Vorarbeit konnte auch ich die Properties im Listing auslesen und ausgeben, mit

$event->getCriteria()->addAssociation('properties.group')

ebenfalls die zugehörigen Groups. Danke also schonmal dafür!

Wo ich aber jetzt ein totales Brett vor dem Kopf habe, ist dass ich die propertyGroups natürlich sortiert brauche, das Feld “sortedProperties” des product-Objektes in twig aber “null” ist.

Kann mir vielleicht jemand einen kleinen Schubs in die richtige Richtung geben (ein großer wäre auch ok ;)) ?

Besten Dank und Grüße,
devnullroot

Der Vollständigkeit halber, falls jemand hier landet: Ich habe meine Lösung in diesem Thread geposted:

https://forum.shopware.com/discussion/64849/ausgabe-von-einzelnen-eigenschaften-in-der-kategorieuebersicht

3 „Gefällt mir“

Genial, danke dir!!!
Leider existiert der Beitrag nicht mehr. Könntest du das vielleicht nochmal posten?
Würde mich nämlich interessieren :slight_smile:

Moinsen @AlexBS ,

wie ich sehe, hast Du den Thread schon gefunden, für alle Anderen:

Beste Grüße,
devnullroot

Wer suchet, der findet :slight_smile: Danke nochmal, das ist echt hilfreich gewesen.

Für Shopware 6.6 und angepasstes Event, was Performance schonender ist:
services.xml

 <service id="XXXXXXXX\Subscriber\ListingPropertiesSubscriber">
            <tag name="kernel.event_subscriber" priority="5000"/>
        </service>

Subscriber:

namespace XXXXXXXXX\Subscriber;

use Shopware\Core\Content\Product\Events\ProductListingCriteriaEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class ListingPropertiesSubscriber implements EventSubscriberInterface {

    public static function getSubscribedEvents(): array
    {
        return [
            ProductListingCriteriaEvent::class => ['addPropertiesGroup', 500],
        ];
    }

    public function addPropertiesGroup(ProductListingCriteriaEvent $event): void
    {
        $event->getCriteria()->addAssociation('properties.group');
    }

}