magento2 - Wie werden geplante Änderungen (Magento_CatalogStaging-Modul) des Produkts programmgesteuert erstellt?

8

Ich möchte "Sonderpreis" für das Produkt von Datum zu Datum programmgesteuert per Code festlegen, weiß aber nicht wie, ich verwende Magento 2 EE. Ich kann in admin verwenden

Geben Sie hier die Bildbeschreibung ein

dann Geben Sie hier die Bildbeschreibung ein

aber ich möchte Code verwenden, um programmgesteuert zu setzen. Wenn jemand weiß, bitte beraten.

Drin
quelle
Sie scheinen Enterprise Edition zu verwenden?
Khoa TruongDinh
Ja, ich benutze die EE-Version
Init

Antworten:

2

Wie Igor bereits erwähnt hat, können Sie Folgendes versuchen. Erstellen Sie zunächst eine geplante Aktualisierungsinstanz und legen Sie den Namen sowie die Start- und Endzeit fest.

/**
 * @var \Magento\Staging\Api\UpdateRepositoryInterface
 */
protected $updateRepository;

/**
 * @var \Magento\Staging\Api\Data\UpdateInterfaceFactory
 */
protected $updateFactory;

/**
 * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface
 */
protected $localeDate;

/**
 * @var \Magento\Catalog\Api\ProductRepositoryInterface
 */
protected $productRepository;

/**
 * @var \Magento\CatalogStaging\Api\ProductStagingInterface
 */
protected $productStaging;

/**
 * @var \Magento\Staging\Model\VersionManager
 */
protected $versionManager;

/**
 * @param \Magento\Staging\Api\UpdateRepositoryInterface $updateRepositoryInterface
 * @param \Magento\Staging\Api\Data\UpdateInterfaceFactory $updateFactory
 * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
 * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepositoryInterface
 * @param \Magento\CatalogStaging\Api\ProductStagingInterface $productStagingInterface
 * @param \Magento\Staging\Model\VersionManagerFactory $versionManagerFactory
 */
public function __construct(
    \Magento\Staging\Api\UpdateRepositoryInterface $updateRepositoryInterface,
    \Magento\Staging\Api\Data\UpdateInterfaceFactory $updateFactory,
    \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
    \Magento\Catalog\Api\ProductRepositoryInterface $productRepositoryInterface,
    \Magento\CatalogStaging\Api\ProductStagingInterface $productStagingInterface,
    \Magento\Staging\Model\VersionManagerFactory $versionManagerFactory
){
    $this->updateRepository = $updateRepositoryInterface;
    $this->updateFactory = $updateFactory;
    $this->localeDate = $localeDate;
    $this->productRepository = $productRepositoryInterface;
    $this->productStaging = $productStagingInterface;
    $this->versionManager = $versionManagerFactory->create();
}


    /** @var \Magento\Staging\Api\Data\UpdateInterface $schedule */
    $schedule = $this->updateFactory->create();
    $schedule->setName("test update");
    $timestampStart = $this->localeDate->scopeTimeStamp() + 3600; 
    $date = new \DateTime('@' . $timestampStart, new \DateTimeZone('UTC')); 
    $schedule->setStartTime($date->format('Y-m-d H:i:s'));

    $timestampEnd = $timestampStart + (60 * 60 * 24);
    $date = new \DateTime('@' . $timestampEnd, new \DateTimeZone('UTC'));
    $schedule->setEndTime($date->format('Y-m-d H:i:s'));

Wenn Sie das Enddatum nicht festlegen, wird die geplante Aktualisierung auf unbestimmte Zeit ausgeführt. Speichern Sie am Ende das geplante Update und legen Sie die Version fest.

    // @var  \Magento\Staging\Api\Data\UpdateInterface
    $stagingRepo = $this->updateRepository->save($schedule);
    $this->versionManager->setCurrentVersionId($stagingRepo->getId());

Erstellen Sie als Nächstes Produktupdates

    $repository = $this->productRepository;
    $product = $repository->get('239487');
    $name = $product->getName();
    $product->setName($name . " - New");
    $price = $product->getPrice();
    $product->setSpecialPrice($price - 10);

Der letzte Schritt besteht darin, Produktaktualisierungen zu planen

    $this->productStaging->schedule($product, $stagingRepo->getId());

Ich schrieb ein kleines Beispiel und es kann gefunden werden hier

Chombe
quelle
0

Sie können hierfür die API verwenden. Möglicherweise müssen Sie zuerst das Update mit abrufen \Magento\Staging\Api\UpdateRepositoryInterface, dann können Sie mit eine andere Version des Produkts erstellen \Magento\CatalogStaging\Api\ProductStagingInterface.

Ich habe es nicht selbst versucht. Lassen Sie mich wissen, wenn es nicht funktioniert und ich werde mehr darüber nachdenken.

Igor Melnykov
quelle
Hallo @ igor-melnykov, denke auch du, aber ich weiß nicht, welche Art von Daten an die API gesendet werden. Ich versuche es, aber Daten beim Senden an die API waren falsch, so dass es fehlschlägt. Bitte schauen Sie genauer hin, danke
Init