Der elegantere Weg wäre, denselben Code wie den Code zu verwenden, der den Flat-Modus beim Speichern der Konfiguration aktiviert. Es kann gefunden werden unter Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode
:
public function processValue()
{
if ((bool)$this->getValue() != (bool)$this->getOldValue()) {
if ((bool)$this->getValue()) {
$this->indexerState->loadByIndexer(\Magento\Catalog\Model\Indexer\Product\Flat\Processor::INDEXER_ID);
$this->indexerState->setStatus(\Magento\Framework\Indexer\StateInterface::STATUS_INVALID);
$this->indexerState->save();
} else {
$this->_productFlatIndexerProcessor->getIndexer()->setScheduled(false);
}
}
}
Ich bin mir ziemlich sicher, dass Sie so etwas tun können:
$this->_productFlatIndexerProcessor->getIndexer()->setScheduled(false);
Wo $this->_productFlatIndexerProcessor
ist eine Instanz von \Magento\Catalog\Model\Indexer\Product\Flat\Processor
.
Mögliche Alternative
Diese Methode speichert die Konfiguration jedoch nicht. Wenn das System prüft, ob flat über die Konfiguration aktiviert ist, wird weiterhin true zurückgegeben.
Eine mögliche Alternative (zu testen) wäre die Verwendung eines Plugins für die isFlatEnabled
Methode vonMagento\Catalog\Model\Indexer\Product\Flat\State
(die Methode ist tatsächlich in der Magento\Catalog\Model\Indexer\AbstractFlatState
Klasse definiert ).
Basierend auf dem, was Sie erreichen möchten, können Sie ein After-Plugin einrichten, um zu erzwingen, dass diese Methode unter bestimmten Bedingungen false zurückgibt.