Как отключить / включить продукт программно в Magento2?

9

Я пытаюсь эмулировать то же поведение, что и при использовании панели администратора для отключения продукта. Я пытаюсь сделать что-то вроде этого:

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

Но я все еще вижу его включенным в админ-панели.

Спасибо.

awavi
источник
Этот код должен работать. В каком состоянии вы смотрите в админ-панели сведения о продукте? Убедитесь, что режим переиндексации находится «на сохранении», если вы хотите немедленно увидеть изменения
Stijn Duynslaeger - Echron
Если я захожу в каталог продуктов> он все еще говорит, включен. И если я попытаюсь [GET] / products / search /? SearchCriteria ... Я все еще вижу его, и статус равен 1.
Авави
Вы уверены, что этот код выполняется? Можете ли вы отладить код? Возможно, попытайтесь установить другое свойство, например описание, чтобы увидеть, будет ли сохранен продукт. Проверьте журналы ошибок. Однажды мне не удалось сохранить продукт из-за неверного поля ... (вы можете проверить это, попытавшись сохранить изменения в панели администратора)
Stijn Duynslaeger - Echron
Да, я уверен, что это будет выполнено. Я могу и отладил это. Нет логов. И нет, это не работает.
Авави
Вы имеете в виду, что вы не можете сохранить продукт в панели администратора?
Стейн Дуйнслегер - Эхрон

Ответы:

11

Проблема заключалась в том, что $product = $this->productRepository->get($sku);получает продукт для магазина по умолчанию. И если вы хотите отключить его глобально, вам нужно пройти

$this->productRepository->get(
    $sku,
    true/* edit mode */,
    0/* global store*/,
    true/* force reload*/
);
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();
    }
}
Ракеш Джесадия
источник
Но это когда вы создаете новый продукт. Теперь я знаю, в чем проблема. Я сохраняю товар только в рамках текущего магазина. Но глобально это все еще будет включено.
Авави