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->_productFlatIndexerProcessor
adalah 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 isFlatEnabled
metode dariMagento\Catalog\Model\Indexer\Product\Flat\State
(metode ini sebenarnya didefinisikan di Magento\Catalog\Model\Indexer\AbstractFlatState
kelas).
Berdasarkan apa yang ingin Anda capai, Anda dapat menyiapkan plugin setelah untuk memaksa metode itu untuk mengembalikan false dalam kondisi tertentu.