3

我想通过升级脚本截断 magento core_url_rewrite 表并重新索引目录 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);
}
4

1 回答 1

5

简短的版本是应该使用数据设置脚本而不是 sql 脚本来执行重新索引。要了解原因,我们需要了解一点 Magento 的引导过程......

Magento 有两种类型的设置脚本。有sql脚本和数据脚本。sql 脚本位于“sql/nameofsetupresource_setup/”文件夹中,并且在 Magento 的引导过程中相对较早地执行。SQL 脚本旨在用于模式更改等,而不是用于数据操作。当 Magento 执行 sql 脚本时,它会在特殊的“更新模式”中执行此操作,并且各种 API 调用(尤其是围绕 Multi-store 功能)不起作用(或在此模式下无法正常工作)。

一旦所有的 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 脚本中重新索引时,存储数据不可用,但在数据脚本中运行时,索引器可以获得所需的信息并正常工作。

有关数据脚本的更多信息,Incho 的这篇博客文章应该会引导您朝着正确的方向前进。

于 2013-11-10T10:18:32.877 回答