Cách thanh lịch hơn sẽ là sử dụng cùng mã với mã cho phép chế độ phẳng khi lưu cấu hình. Nó có thể được tìm thấy dưới 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);
}
}
}
Vì vậy, tôi khá chắc chắn rằng bạn có thể làm một cái gì đó như thế:
$this->_productFlatIndexerProcessor->getIndexer()->setScheduled(false);
Trường hợp $this->_productFlatIndexerProcessor
là một ví dụ của \Magento\Catalog\Model\Indexer\Product\Flat\Processor
.
Có thể thay thế
Tuy nhiên, phương pháp đó không lưu cấu hình nên khi hệ thống kiểm tra nếu căn hộ được bật thông qua cấu hình thì nó vẫn trả về đúng.
Một cách khác có thể (sẽ được kiểm tra) sẽ là sử dụng một plugin trên isFlatEnabled
phương thức từMagento\Catalog\Model\Indexer\Product\Flat\State
(phương thức thực sự được định nghĩa trong Magento\Catalog\Model\Indexer\AbstractFlatState
lớp).
Dựa trên những gì bạn muốn đạt được, bạn có thể thiết lập một plugin sau để buộc phương thức đó trả về false trong các điều kiện nhất định.