Magento2でプログラムを使用して製品を無効/有効にする方法は?


9

管理パネルを使用して製品を無効にする場合と同じ動作をエミュレートしようとしています。私はこのようなことをやろうとしています:

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

しかし、それでも管理パネルで有効になっているように見えます。

ありがとう。


このコードは動作するはずです。あなたが管理パネル、製品の詳細を見るときのステータスは何ですか?変更をすぐに表示したい場合は、
インデックスの再作成

製品>カタログに移動しても、有効と表示されています。そしてsearchCriteria /製品/検索/私は[GET]しようとすると...私はまだそれを見ると、ステータスが1に等しいのですか?
awavi

このコードが実行されることを確信していますか?コードをデバッグできますか?説明のような別のプロパティを設定して、製品が保存されるかどうかを確認してください。エラーログを確認してください。無効なフィールドのために製品を保存できませんでした...(管理パネルで変更を保存してみることで確認できます)
Stijn Duynslaeger-Echron

はい、確実に実行されます。デバッグできます。ログはありません。いいえ、機能しません。
awavi 16

管理パネルで製品を保存できないということですか?
Stijn Duynslaeger-Echron

回答:


11

問題は$product = $this->productRepository->get($sku);、デフォルトストアの製品を取得することでした。そして、それをグローバルに無効にしたい場合は、渡す必要があります

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

このコードを使用して製品をグローバルに無効にする方法を説明してください。
プルショタムシャルマ2018

このコードはそうです!
awavi

ありがとう-それは私のために働いた!
オクタリン

1

以下のコードで試すことができます、

コアファイルコード、vendor / magento / module-catalog-sample-data / Model / Product.phpを確認できます。

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();
    }
}

しかし、これはあなたが新しい製品を作成しているときです。私は今問題が何であるかを知っています。現在のストアの範囲内で商品を保存しています。ただし、グローバルには引き続き有効になります。
awavi 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.