Полное расширение переиндексации для серверной части не работает. Как выполнить полную переиндексацию для 13.1 в бэкэнде?
Поскольку Magento EE 13.1 не допускает полной переиндексации в бэкэнде, я разработал расширение, которое предоставляет кнопку "Переиндексация оболочки" в бэкэнде (на странице управления индексами) и предполагает выполнение полной переиндексации. Но, похоже, "полная переиндексация" не будет запущена, похоже, были обновлены только атрибуты продукта. Кто-нибудь может мне помочь? Что не так с моим модулем?
Спасибо всем за помощь.
App/code/local/MyModule/ShellIndexer/controllers/Adminhtml/ProcessController.php
require_once 'Mage/Index/controllers/Adminhtml/ProcessController.php';
class MyModule_ShellIndexer_Adminhtml_ProcessController extends Mage_Index_Adminhtml_ProcessController {
public function shellAction() {
$process = Mage::getSingleton('index/indexer');
$collection=$process->getProcessesCollection();
$indexingProcesses = Mage::getSingleton('index/indexer')->getProcessesCollection();
foreach ($indexingProcesses as $process) {
$process->reindexEverything();
}
Mage::app()->getCacheInstance()->flush();
}
}
App/code/local/MyModule/ShellIndexer/Block/Adminhtml/Process.php
class MyModule_ShellIndexer_Block_Adminhtml_Process extends Enterprise_Index_Block_Adminhtml_Process {
public function __construct()
{
$this->_blockGroup = 'enterprise_index';
$this->_controller = 'adminhtml_process';
$this->_headerText = Mage::helper('index')->__('Index Management');
parent::__construct();
$this->_removeButton('add');
$url = Mage::helper("adminhtml")->getUrl("/process/shell");
$script = "new Ajax.Request('".$url."',{method:'post'});";
$this->_addButton('Shell ReIndex', array(
'label' => Mage::helper('index')->__('Shell Re-Index'),
'onclick' => $script,
'class' => 'save',
), -100);
}
}
Etc/config.xml (не имеет отношения к проблеме, но если кто-то хочет перестроить расширение)
<?xml version="1.0"?>
<config>
<modules>
<MyModule_ShellIndexer>
<version>1.0.0.0</version>
</MyModule_ShellIndexer>
</modules>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<MyModule_ShellIndexer before="Mage_Index_Adminhtml">MyModule_ShellIndexer_Adminhtml</MyModule_ShellIndexer>
</modules>
</args>
</adminhtml>
</routers>
</admin>
<global>
<blocks>
<mymodule_shellindexer>
<class>MyModule_ShellIndexer_Block</class>
</mymodule_shellindexer>
<enterprise_index>
<rewrite>
<adminhtml_process>MyModule_ShellIndexer_Block_Adminhtml_Process</adminhtml_process>
</rewrite>
</enterprise_index>
</blocks>
</global>
</config>
1 answers
Попробуйте следующий фрагмент кода для переиндексации всего через php.
/* @var $indexCollection Mage_Index_Model_Resource_Process_Collection */
$indexCollection = Mage::getModel('index/process')->getCollection();
foreach ($indexCollection as $index) {
/* @var $index Mage_Index_Model_Process */
$index->reindexAll();
}
Это просто зациклит все процессы индексирования, а затем вызовет переиндексацию процесса.