Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento Magmi数据泵API-商店中未显示项目_Magento_Import_Magmi_Datapump - Fatal编程技术网

Magento Magmi数据泵API-商店中未显示项目

Magento Magmi数据泵API-商店中未显示项目,magento,import,magmi,datapump,Magento,Import,Magmi,Datapump,当我添加带有Magmi Datapump API的产品时,该产品会显示在“管理产品”页面中,但该产品在商店中不可见 我在“管理产品”页面中打开产品进行编辑,只需点击“保存”,产品就会显示在商店中。当我手动保存产品时,Magento是否在后端执行一些操作 此外,当我手动保存产品时,会收到以下消息: The export profile-product relations has been updated. 此会议以前没有出现过。您没有提到您正在使用的Magento版本,但我假设它在1.8/1.9

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

我在“管理产品”页面中打开产品进行编辑,只需点击“保存”,产品就会显示在商店中。当我手动保存产品时,Magento是否在后端执行一些操作

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

The export profile-product relations has been updated.

此会议以前没有出现过。

您没有提到您正在使用的Magento版本,但我假设它在1.8/1.9 CE或更高版本附近

什么是玛格米? Magmi是一个第三方软件包/实用程序,允许您将数据直接导入Magento。它读取Magento配置(模型的表名、结构、类型等),并使用它直接写入MySQL数据库

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

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

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

  • 同步/在同一请求过程中重新索引产品平面表
  • 计划通过cron执行产品平面表的重新索引
根据您的Magento版本,产品平面索引的默认设置在此处非常重要。我相信1.9在默认情况下引入了调度,而旧版本在默认情况下会同步运行它们

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

你错过了什么 回到Magmi——它直接写入数据库表,因此跳过了ORM层,其中包括用于重新索引的命令

当您在产品上按Save in Magento admin时(您说这使您的更改生效)会自动为该产品同步执行索引。此行为表示产品平面索引设置为“保存时”而不是“按计划”运行。这就是为什么在管理中再次保存产品后,您会在前端看到该产品,纯粹是因为Magento ORM触发该产品的重新索引,将其插入到产品平面表中(例如,
catalog\u product\u flat\u 1
)。如果您知道,这些表是Magento前端在启用平面表时读取的表-这是为了避免EAV模型结构的复杂性以及从产品(和其他)模型读取所需的许多联接(和配置查找/处理)。平面表(索引表)在长的但只有一行中包含了它们所需的所有内容

你需要做什么 所以,尽管如此,我们可以假设您的产品平面索引设置为在save上运行

我的主要建议是将其更改为“按计划”运行。您可以通过系统->索引管理从Magento管理面板执行此操作

你需要从这里开始

如果您的CE(community edition)版本具有更新changelog表的MySQL表触发器,这将起作用

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

Magmi通过命令行 在运行Magmi import命令后,触发命令行启动的产品相关数据重新索引:

php indexer.php --reindex catalog_product_price,catalog_url,catalog_product_flat
通过PHP的Magmi 如果您是从第三方集成脚本运行Magmi,而该脚本不是从命令行触发的,或者您不想在之后添加像上面那样的CLI命令(同样,您没有提到这些详细信息),则可以在Magmi数据泵调用的末尾添加一个重新索引的PHP脚本:

foreach (...) {
    $datapump->ingest($data);
}
$datapump->endImportSession();

// reindex now!
foreach (['catalog_product_price', 'catalog_url', 'catalog_product_flat'] as $indexCode) {
    $process = Mage::getModel('index/indexer')->getProcessByCode($indexCode);
    $process->reindexAll();
}

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

我投票将此问题作为主题外的问题结束,因为堆栈溢出是一个问答网站。你的问题不是关于编程。也许你应该把它贴上去?谢谢你的帮助。两种解决方案都有效。我将在脚本中使用PHP代码自动触发索引器。再次感谢你。还有一个解释得很好的答案。