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.

awavi
quelle
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*/
);
awavi
quelle
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();
    }
}
Rakesh Jesadiya
quelle
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