よりエレガントな方法は、構成を保存するときにフラットモードを有効にするコードと同じコードを使用することです。それは以下にあり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
メソッドのプラグインMagento\Catalog\Model\Indexer\Product\Flat\State
を使用することです(メソッドは実際にはMagento\Catalog\Model\Indexer\AbstractFlatState
クラスで定義されています)。
達成したいことに基づいて、特定の条件下でそのメソッドがfalseを返すように後プラグインを設定できます。