Cara yang lebih elegan adalah dengan menggunakan kode yang sama dengan kode yang memungkinkan mode flat saat menyimpan konfigurasi. Itu dapat ditemukan di bawah 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);
}
}
}
Jadi saya cukup yakin Anda bisa melakukan hal seperti itu:
$this->_productFlatIndexerProcessor->getIndexer()->setScheduled(false);
Di mana $this->_productFlatIndexerProcessoradalah contoh dari \Magento\Catalog\Model\Indexer\Product\Flat\Processor.
Alternatif yang mungkin
Namun, metode itu tidak menyimpan konfigurasi sehingga ketika sistem memeriksa apakah flat diaktifkan melalui konfigurasi itu masih mengembalikan true.
Alternatif yang mungkin (untuk diuji) adalah menggunakan plugin pada isFlatEnabledmetode dariMagento\Catalog\Model\Indexer\Product\Flat\State (metode ini sebenarnya didefinisikan di Magento\Catalog\Model\Indexer\AbstractFlatStatekelas).
Berdasarkan apa yang ingin Anda capai, Anda dapat menyiapkan plugin setelah untuk memaksa metode itu untuk mengembalikan false dalam kondisi tertentu.