どの CSV 列が必須かを忘れてしまいましたが、一部が欠落している場合、インポーターはそれを通知しませんが、代わりに説明している動作が得られることを覚えています。
何が必須かを確認する最も簡単な方法は、次のとおりです。
- Magento ImportExport モジュールのバグを修正
- 管理画面で新しい製品を作成する
- 新商品がフロントエンドに表示されていることを確認する
- Magento ImportExport エクスポーターで新製品をエクスポートする
- 作成した商品を削除
- 以前にエクスポートした製品 csv をインポートします
- キャッシュをクリアしてデータを再インデックス化する
- 製品がフロントエンドに表示されていることを確認します (表示されるはずです)
- CSV をエクスポートしたものと比較し、不足しているものを見つけてください。
- 列を追加/固定してCSVをインポートし、製品がインポートされるまでデータを追加して、フロントエンドに表示されるようにしてください
これには、試行錯誤の割り当てが必要です...
私の場合、欠落している列は常に同じ値を持っていたので、これがあなたの問題に当てはまる場合は、CSV インポーターを拡張して、CSV を手動で修正する代わりに、そこにそれらの値をハードコードすることができます。
製品を管理者で開いて保存すると、製品が正しく保存されるため、次のこともできます。
- 製品を輸入する
- その製品を輸出する
- その製品を管理者で開き、保存します
- 新しく保存された製品をエクスポートする
- エクスポートされた CSV の相違点を比較する
Magento ImportExport のバグの修正:
最初のバグは、複数の製品をインポートすると、最初の製品の数量情報がすべての製品に使用されることです。これを修正するには、関数$row = array();
の直前に追加する必要があります。$row['product_id'] = $this->_newSku[$rowData[self::COL_SKU]]['entity_id'];
Mage_ImportExport_Model_Import_Entity_Product::_saveStockItem()
2 番目のバグは、複数の製品をインポートするときに、Magento ImportExport モジュールが外部キー制約エラーを返す原因となります。Magento が製品データを複数のセグメントに分割し、1 つの製品が 2 つのセグメントに配置されている場合、インポーターは、2 番目のセグメントをインポートする前に最初のセグメントで製品用にインポートされたデータを削除し、データベースの破損を引き起こすため、エラーが発生します (詳細な説明については、このリンクを参照してください - この以下の解決策を得た場所です)。
外部キー制約を削除しても問題は解決されませんが、データベースに破損したデータが含まれるため、問題が悪化することに注意してください。
それを修正するには、関数内のコードを変更する必要がありMage_ImportExport_Model_Import_Entity_Abstract::_saveValidatedBunches()
ます:
if ($startNewBunch || !$source->valid()) {
追加後
if ($startNewBunch && count($bunchRows) > 1) {
$arrKeys = array_keys($bunchRows);
$arrNew = array();
while(($tRow = array_pop($bunchRows))) {
$tKey = array_pop($arrKeys);
$arrNew[$tKey] = $tRow;
if ($tRow['sku']) {
break;
}
}
$nextRowBackup = array_reverse($arrNew, TRUE) + $nextRowBackup;
}
お役に立てれば。