Wie kann ich ein Produkt in Magento2 programmgesteuert deaktivieren / aktivieren?


9

Ich versuche, dasselbe Verhalten zu emulieren, wie wenn Sie das Admin-Panel zum Deaktivieren eines Produkts verwenden. Ich versuche so etwas zu tun:

$product = $this->productRepository->get($sku);
$product->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED);
$this->productRepository->save($product);

Aber ich sehe es immer noch als aktiviert im Admin-Bereich.

Vielen Dank.


Dieser Code sollte funktionieren. Wie ist der Status, wenn Sie im Admin-Bereich die Produktdetails anzeigen? Stellen Sie sicher, dass der Neuindizierungsmodus "beim Speichern" ist, wenn Sie die Änderungen sofort sehen möchten
Stijn Duynslaeger - Echron

Wenn ich zu Produkte> Katalog gehe, heißt es immer noch aktiviert. Und wenn ich versuche [GET] / products / search /? SearchCriteria ... Ich sehe es immer noch und der Status ist gleich 1.
awavi

Sind Sie sicher, dass dieser Code ausgeführt wird? Können Sie den Code debuggen? Versuchen Sie möglicherweise, eine andere Eigenschaft wie die Beschreibung festzulegen, um festzustellen, ob das Produkt gespeichert wird. Überprüfen Sie die Fehlerprotokolle. Ich konnte einmal ein Produkt wegen eines ungültigen Feldes nicht speichern ... (Sie können dies überprüfen, indem Sie versuchen, eine Änderung im Admin-Bereich zu speichern)
Stijn Duynslaeger - Echron

Ja, ich bin sicher, dass es ausgeführt wird. Ich kann und habe es getestet. Keine Protokolle. Und nein, es funktioniert nicht.
Awavi

Sie meinen, Sie können das Produkt nicht im Admin-Bereich speichern?
Stijn Duynslaeger - Echron

Antworten:


11

Das Problem war, dass $product = $this->productRepository->get($sku);ein Produkt für den Standardspeicher abgerufen wird. Und wenn Sie es global deaktivieren möchten, müssen Sie bestehen

$this->productRepository->get(
    $sku,
    true/* edit mode */,
    0/* global store*/,
    true/* force reload*/
);

Bitte erläutern Sie, wie Sie diesen Code verwenden, um das Produkt global zu deaktivieren.
Purushotam Sharma

Dieser Code tut!
Awavi

Danke - es hat bei mir funktioniert!
Oktarin

1

Sie können mit dem folgenden Code versuchen,

Sie können den Code der Kerndatei unter vendor / magento / module-catalog-sample-data / Model / Product.php überprüfen

class Product
{
    public function __construct(
        \Magento\Catalog\Model\ProductFactory $productFactory
    ) {
        $this->productFactory = $productFactory;
    }
    public function saveproduct()
    {

        $product = $this->productFactory->create();
        $product->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED);
        $product->save();
    }
}

Dies ist jedoch der Fall, wenn Sie ein neues Produkt erstellen. Ich weiß jetzt, wo das Problem liegt. Ich speichere das Produkt nur im Rahmen des aktuellen Geschäfts. Aber global wird es weiterhin aktiviert sein.
Awavi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.