我想通过升级脚本截断magento core_url_rewrite表和reindex目录url重写。该表被截断但重建索引目录URL无法正常工作。任何帮助请... ..
//truncate magento core_url_rewrite table
$installer = $this;
$installer->startSetup();
$installer->run(
"TRUNCATE TABLE `{$this->getTable('core_url_rewrite')}` "
);
$installer->endSetup();
// reindex catalog url rewrites
$indexCatUrl = Mage::getSingleton('index/indexer')->getProcessByCode('catalog_url');
try {
$indexCatUrl->reindexAll();
} catch(Exception $e) {
$this->log('Error Reindex all ' . $e);
throw ($e);
}
答案 0 :(得分:5)
简短版本是应使用数据设置脚本而不是sql脚本来执行reindex。为了理解原因,我们需要了解Magento的自助程序......
Magento有两种类型的设置脚本。有sql脚本和数据脚本。 sql脚本位于“sql / nameofsetupresource_setup /”文件夹中,并且在Magento的引导过程中相对较早地执行。 SQL脚本旨在用于架构更改等,而不用于数据操作。当Magento执行sql脚本时,它会以特殊的“更新模式”执行,并且各种API调用(特别是围绕多商店功能)不起作用(或者在此模式下无法正常工作)。
一旦所有的sql脚本和更多的Magento引导过程发生,就会运行第二批安装脚本。 “data”脚本位于“data / nameofsetupresource_setup”中,并命名为“data-upgrade-0.1.0-0.1.1.php”而不是“mysql4-upgrade-0.1.0-0.1.1.php”。一旦我们使用sql脚本获得最新的模式,这些“数据”脚本将用于在我们的数据库中插入/操作数据。数据脚本不在更新模式下执行,Magento核心已完全初始化并可以使用。
所有Magento索引器都关注为您的安装中的每个“商店”构建正确的数据。即使您没有在Magento中使用多商店功能,索引器也需要查找可用的商店代码等,才能正确完成工作。尝试在sql脚本中重新索引时,存储数据不可用,但在数据脚本中运行时,索引器可以获取所需的信息并正常工作。
有关数据脚本的更多信息,this blog post from Inchoo应引导您朝着正确的方向前进。