Come disabilitare / abilitare un prodotto a livello di codice in Magento2?


9

Sto cercando di emulare lo stesso comportamento di quando si utilizza il pannello di amministrazione per disabilitare un prodotto. Sto cercando di fare qualcosa del genere:

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

Ma lo vedo ancora come abilitato nel pannello di amministrazione.

Grazie.


Questo codice dovrebbe funzionare. Qual è lo stato quando guardi nel pannello di amministrazione, i dettagli del prodotto? Assicurati che la modalità reindex sia "al salvataggio" se vuoi vedere immediatamente le modifiche
Stijn Duynslaeger - Echron

Se vado a prodotti> catalogo dice ancora abilitato. E se provo a [GET] / products / search /? SearchCriteria ... Lo vedo ancora e lo stato è uguale a 1.
awavi

Sei sicuro che questo codice venga eseguito? Puoi eseguire il debug del codice? Forse prova a impostare un'altra proprietà come la descrizione per vedere se il prodotto viene salvato. Controlla i log degli errori. Una volta non sono stato in grado di salvare un prodotto a causa di un campo non valido ... (puoi verificarlo provando a salvare una modifica nel pannello di amministrazione)
Stijn Duynslaeger - Echron

Sì, sono sicuro che verrà eseguito. Posso e ho eseguito il debug. Nessun registro. E no, non funziona.
Awavi,

Vuoi dire che non puoi salvare il prodotto nel pannello di amministrazione?
Stijn Duynslaeger - Echron,

Risposte:


11

Il problema era che $product = $this->productRepository->get($sku);ottiene un prodotto per l'archivio predefinito. E se vuoi disabilitarlo a livello globale devi passare

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

Spiegare come utilizzare questo codice per disabilitare il prodotto a livello globale?
Purushotam Sharma,

Questo codice lo fa!
Awavi,

grazie - ha funzionato per me!
Oktarin,

1

Puoi provare con il codice qui sotto,

Puoi controllare il codice del file core, 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();
    }
}

Ma questo è quando stai creando un nuovo prodotto. Ora so qual è il problema. Sto salvando il prodotto solo nell'ambito del negozio attuale. Ma a livello globale sarà comunque abilitato.
Awavi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.