Bagaimana cara menonaktifkan / mengaktifkan produk secara programatis di Magento2?

9

Saya mencoba meniru perilaku yang sama seperti ketika Anda menggunakan panel admin untuk menonaktifkan produk. Saya mencoba melakukan sesuatu seperti ini:

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

Tapi saya masih melihatnya diaktifkan di panel admin.

Terima kasih.

awavi
sumber
Kode ini seharusnya berfungsi. Apa statusnya ketika Anda melihat di panel admin, detail produk? Pastikan mode reindex "on save" jika Anda ingin segera melihat perubahan
Stijn Duynslaeger - Echron
Jika saya masuk ke katalog produk> itu masih mengatakan diaktifkan. Dan Jika saya mencoba [MENDAPATKAN] / produk / search /? SearchCriteria ... Saya masih melihatnya dan statusnya sama dengan 1.
awavi
Anda yakin kode ini dijalankan? Bisakah Anda men-debug kode? Mungkin mencoba mengatur properti lain seperti deskripsi untuk melihat apakah produk tersebut disimpan. Periksa log kesalahan. Saya pernah tidak dapat menyimpan produk karena bidang yang tidak valid ... (Anda dapat memeriksa dengan mencoba menyimpan perubahan di panel admin)
Stijn Duynslaeger - Echron
Ya saya yakin itu akan dieksekusi. Saya dapat dan telah men-debugnya. Tidak ada log. Dan tidak, itu tidak berhasil.
awavi
Maksud Anda, Anda tidak dapat menyimpan produk di panel admin?
Stijn Duynslaeger - Echron

Jawaban:

11

Masalahnya adalah bahwa $product = $this->productRepository->get($sku);mendapatkan produk untuk toko default. Dan jika Anda ingin menonaktifkannya secara global, Anda harus lulus

$this->productRepository->get(
    $sku,
    true/* edit mode */,
    0/* global store*/,
    true/* force reload*/
);
awavi
sumber
Tolong jelaskan bagaimana menggunakan kode ini untuk menonaktifkan produk secara global?
Purushotam Sharma
Kode ini tidak!
awavi
terima kasih - itu berhasil untuk saya!
Oktarin
1

Anda dapat mencoba dengan kode di bawah ini,

Anda dapat memeriksa kode file inti, vendor / magento / modul-katalog-sampel-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();
    }
}
Rakesh Jesadiya
sumber
Tapi yang ini adalah ketika Anda membuat produk baru. Saya sekarang tahu apa masalahnya. Saya menyimpan produk hanya dalam ruang lingkup toko saat ini. Tetapi secara global masih akan diaktifkan.
awavi