Magmi Datapump API - 项目未在商店中显示

时间:2017-02-27 18:29:00

标签: magento import magmi datapump

当我使用Magmi Datapump API添加产品时,产品会显示在“管理产品”页面中,但产品在商店中不可见。

我在“管理产品”页面中打开产品进行编辑,然后点击“保存”,产品就会显示在商店中。当我手动保存产品时,Magento是否在后端做了一些事情?

另外,当我手动保存产品时,我收到此消息:

The export profile-product relations has been updated.

之前没有这种说法。

1 个答案:

答案 0 :(得分:0)

您还没有提到您正在使用的Magento版本,但我认为它在1.8 / 1.9 CE或更高的范围内。

什么是Magmi?

Magmi是第三方软件包/实用程序,可让您将数据直接导入Magento。它读取Magento配置(模型的表名,结构,类型等),并使用它直接写入MySQL数据库。

这样做的目的是绕过Magento ORM层 - 这在某些情况下提供了好处,主要是速度。缺点是除非你因为你确切知道为什么要这样做以及它的缺点已经存在,否则你会错过Magento的ORM所发生的事情 - 尤其是事件观察者和前/后写回调。

保存产品时

默认情况下,当您在管理界面中保存产品时,Magento将通过$model->save()操作通过ORM直接写入数据库。

此过程通过关联(通过_afterSave或事件观察者)执行以下两项操作之一(如果您启用了平面产品表,我假设您这样做):

  • 在同一请求流程中同步重新索引产品平台
  • 通过cron安排产品平台的重新索引

根据您的Magento版本,产品展平指数的默认设置在此处非常重要。我相信默认情况下,1.9会引入调度它们,而旧版本默认会同步运行它们。

企业版:如果您正在运行企业版,MySQL表触发器实际上应该自动检测这些产品记录更改,并通过更改日志表({{1})安排重新索引})。对于这个问题,我假设您正在使用社区版。

你缺少什么

回到Magmi - 它直接写入数据库表,因此跳过ORM层,其中包括重建索引的命令。

当您在产品上按Magento admin中的保存时(并且您说这使您的更改有效)自动为此产品执行索引 - 同步。此行为表明您的产品平面索引设置为在保存时运行""而不是"按时间表"。这就是为什么你在admin中再次保存产品后在前端看到产品的原因,纯粹是因为Magento ORM触发了该产品的reindex,将其插入产品平台(例如*_cl)。如果您知道,这些表是Magento的前端在您启用平面表时读取的表 - 这是为了避免EAV模型结构的复杂性以及需要的许多连接(和配置查找/处理)从产品(和其他)模型中读取。平面表(索引)具有长而单行所需的一切。

您需要做什么

所以 - 所有这一切 - 我们可以假设您的产品平面索引设置为在保存时运行。

我建议的主要是你将其改为运行"按时间表"。您可以通过系统 - >从Magento管理面板执行此操作。指数管理。

从此处您需要enable the Magento system cron

如果您的CE(社区版)版本具有更新更改日志表的MySQL表触发器,这将起作用。 You can check for this

如果没有,您需要手动触发重新索引。根据您对Magmi的调用方式,您可以采用以下两种方式之一:

Magmi通过命令行

在您运行Magmi导入命令后,触发命令行启动的产品相关数据重建索引:

catalog_product_flat_1

Magmi通过PHP

如果您从第三方集成脚本中运行Magmi,该脚本不是从命令行触发的,或者您不想在之后添加如上所述的CLI命令(同样,您不要提到这些细节),您可以使用重建索引PHP脚本到Magmi数据泵调用结束:

php indexer.php --reindex catalog_product_price,catalog_url,catalog_product_flat

TL; DR

确保在使用Magmi导入后重新索引产品数据,因为它会跳过通常会为您处理此问题的Magento ORM。