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->_productFlatIndexerProcessorist 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 isFlatEnabledMethode vonMagento\Catalog\Model\Indexer\Product\Flat\State (die Methode ist tatsächlich in der Magento\Catalog\Model\Indexer\AbstractFlatStateKlasse 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.