La forma más elegante sería usar el mismo código que el código que habilita el modo plano al guardar la configuración. Se puede encontrar en 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);
}
}
}
Así que estoy bastante seguro de que podrías hacer algo así:
$this->_productFlatIndexerProcessor->getIndexer()->setScheduled(false);
¿Dónde $this->_productFlatIndexerProcessor
está una instancia de \Magento\Catalog\Model\Indexer\Product\Flat\Processor
.
Alternativa posible
Sin embargo, ese método no guarda la configuración, por lo que cuando el sistema verifica si Flat está habilitado a través de la configuración, aún devuelve verdadero.
Una posible alternativa (para ser probado) sería usar un complemento en el isFlatEnabled
método deMagento\Catalog\Model\Indexer\Product\Flat\State
(el método está realmente definido en la Magento\Catalog\Model\Indexer\AbstractFlatState
clase).
Según lo que desee lograr, puede configurar un complemento posterior para forzar que el método devuelva falso bajo ciertas condiciones.