Comment désactiver / activer un produit par programme dans Magento2?


9

J'essaie d'imiter le même comportement que lorsque vous utilisez le panneau d'administration pour désactiver un produit. J'essaie de faire quelque chose comme ça:

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

Mais je le vois toujours comme activé dans le panneau d'administration.

Merci.


Ce code devrait fonctionner. Quel est l'état lorsque vous regardez dans le panneau d'administration, les détails du produit? Assurez-vous que le mode de réindexation est "en sauvegarde" si vous voulez voir les changements immédiatement
Stijn Duynslaeger - Echron

Si je vais à produits> catalogue, il est toujours dit activé. Et si j'essaye de [OBTENIR] / produits / recherche /? Critères de recherche ... je le vois toujours et le statut est égal à 1.
awavi

Vous êtes sûr que ce code est exécuté? Pouvez-vous déboguer le code? Essayez peut-être de définir une autre propriété comme la description pour voir si le produit est enregistré. Vérifiez les journaux d'erreurs. Une fois, je n'ai pas pu enregistrer un produit en raison d'un champ non valide ... (vous pouvez le vérifier en essayant d'enregistrer une modification dans le panneau d'administration)
Stijn Duynslaeger - Echron

Oui, je suis sûr qu'il est exécuté. Je peux et je l'ai débogué. Pas de journaux. Et non, ça ne marche pas.
awavi

Vous voulez dire que vous ne pouvez pas enregistrer le produit dans le panneau d'administration?
Stijn Duynslaeger - Echron

Réponses:


11

Le problème était qu'il $product = $this->productRepository->get($sku);obtient un produit pour le magasin par défaut. Et si vous voulez le désactiver globalement, vous devez passer

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

Veuillez expliquer comment utiliser ce code pour désactiver le produit à l'échelle mondiale?
Purushotam Sharma

Ce code fait!
awavi

merci - cela a fonctionné pour moi!
Oktarin

1

Vous pouvez essayer avec le code ci-dessous,

Vous pouvez vérifier le code du fichier principal, vendeur / magento / module-catalogue-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();
    }
}

Mais celui-ci est lorsque vous créez un nouveau produit. Je sais maintenant quel est le problème. J'enregistre le produit dans le cadre du magasin actuel. Mais globalement, il sera toujours activé.
awavi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.