Более элегантный способ - использовать тот же код, что и код, который включает плоский режим при сохранении конфигурации. Его можно найти под 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);
}
}
}
Так что я уверен, что вы могли бы сделать что-то подобное:
$this->_productFlatIndexerProcessor->getIndexer()->setScheduled(false);
Где $this->_productFlatIndexerProcessor
это экземпляр \Magento\Catalog\Model\Indexer\Product\Flat\Processor
.
Возможная альтернатива
Однако этот метод не сохраняет конфигурацию, поэтому, когда система проверяет, включена ли квартира через конфигурацию, она все равно возвращает значение true.
Возможной альтернативой (подлежащей проверке) будет использование плагина для isFlatEnabled
метода fromMagento\Catalog\Model\Indexer\Product\Flat\State
(метод фактически определен в Magento\Catalog\Model\Indexer\AbstractFlatState
классе).
В зависимости от того, чего вы хотите достичь, вы можете установить плагин after, чтобы этот метод возвращал false при определенных условиях.