Hoe u inactieve producten in Shopware beheert
Wanneer u bestellingen van een ander e-commerceplatform in uw Winkelartikelen shop, moet u mogelijk artikelen die in Shopware inactief zijn, in deze bestellingen opnemen. Dit artikel legt het probleem uit en biedt een oplossing om deze gedeactiveerde artikelen op te slaan in Shopware-bestellingen.
Probleem geconfronteerd
Bij het integreren van bestellingen van een ander e-commerceplatform in het Shopware-systeem is het niet nodig om deze artikelen op de Shopware-frontend weer te geven, daarom hebben we ze gedeactiveerd. Gedeactiveerde artikelen kunnen echter niet worden opgehaald via de SalesChannel-productrepository bij het invoegen van ERP-bestellingen in Shopware.
De standaardbeperking binnen Shopware beperkt de zichtbaarheid van producten op basis van hun actieve status, waardoor wordt voorkomen dat inactieve producten worden opgehaald.
Standaardproductbeschikbaarheidsfilter
Standaard gebruikt Shopware de klasse ProductAvailableFilter
om te bepalen welke producten beschikbaar zijn voor een bepaald verkoopkanaal. Het relevante codefragment is als volgt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | ```php <?php declare(strikte_types=1); naamruimte Shopware\Core\Content\Product\SalesChannel; gebruik Shopware\Core\Content\Product\Aggregate\ProductVisibility\ProductVisibilityDefinition; gebruik Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter; gebruik Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\MultiFilter; gebruik Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\RangeFilter; gebruik Shopware\Core\Framework\Log\Package; #[Pakket('inventaris')] klasse ProductAvailableFilter breidt MultiFilter uit { publieke functie __construct(string $salesChannelId, int $visibility = ProductVisibilityDefinition::VISIBILITY_ALL) { ouder::__construct( zelf::CONNECTION_AND, [ new RangeFilter('product.visibilities.visibility', [RangeFilter::GTE => $visibility]), new EqualsFilter('product.visibilities.salesChannelId', $salesChannelId), new EqualsFilter('product.active', true), ] ); } } ``` |
In dit filter zorgt de regel new EqualsFilter('product.active', true)
ervoor dat alleen actieve producten worden geretourneerd.
Oplossing: productfilters aanpassen
Om inactieve producten in Shopware op te halen, moet u het ProductAvailableFilter
uitbreiden om het gedrag van het productophaalproces te wijzigen. Hieronder vindt u een stapsgewijze oplossing:
Stap 1: Maak een aangepast filter
U kunt een aangepaste filterklasse maken die de bestaande ProductAvailableFilter
uitbreidt. Zo gaat het:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | ```php <?php naamruimte AldiOrderIntegration\Services; gebruik Shopware\Core\Content\Product\SalesChannel\ProductAvailableFilter; klasse CustomProductAvailableFilter breidt ProductAvailableFilter uit { publieke functie __construct(string $salesChannelId, int $visibility = 0) { parent::__construct($salesChannelId, $visibility); $dit->query's = []; } } ``` |
In dit aangepaste filter overschrijft u de zichtbaarheidsinstelling om het ophalen van inactieve producten mogelijk te maken.
Stap 2: Implementeer het aangepaste filter in uw code
Gebruik uw ‘CustomProductAvailableFilter’ in plaats van het standaard ‘ProductAvailableFilter’ wanneer u de productrepository opvraagt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ```php $filter = nieuw CustomProductAvailableFilter($salesChannelId); $criteria = nieuwe criteria(); $criteria->addFilter($filter); $criteria->addFilter(new EqualsFilter('manufacturerNumber', $productData['productCode'])); $criteria->addAssociation('opties.groep'); $product = $dit->productRepository->zoeken($criteria, $salesChannelContext)->eerste(); ``` |
Conclusie
Met deze stappen kunt u het standaardgedrag van Shopware’s productfiltersysteem met succes wijzigen. Hierdoor kunt u inactieve producten ophalen bij het integreren van bestellingen van een ander e-commerceplatform. Door dit maatwerk uit te voeren, heeft u meer controle over welke producten zichtbaar en toegankelijk zijn in uw Shopware winkel. Als u op zoek bent naar een betrouwbare Shopware-bureau Neem gerust contact met ons op als u wilt helpen met uw e-commercebehoeften.
Recent help desk articles
Grüße! Ich bin Aneesh Sreedharan, CEO von 2Hats Logic Solutions. Bei 2Hats Logic Solutions widmen wir uns der Bereitstellung von technischem Fachwissen und der Lösung Ihrer Probleme in der Welt der Technologie. Unsere Blog-Seite dient als Ressource, in der wir Einblicke und Erfahrungen teilen und wertvolle Perspektiven auf Ihre Fragen bieten.