Magento の既存の製品に画像を追加するために、次のコードを使用しています。
Mage::app()->setCurrentStore($target_store);
$product = Mage::getModel("catalog/product")->loadByAttribute($sku);
$product->addImageToMediaGallery(
$local_img_path,
array('image', 'thumbnail', 'small_image'),
false,
false
);
$product->save();
更新/追加する必要があるすべての製品に対してこれを実行したら、すべてのインデックスを再作成し、キャッシュをクリアします。製品の管理領域に画像が表示されません。ただし、画像はフロントエンドの商品詳細ページには表示されますが、カテゴリ リスト ページの小さな画像には表示されません。
データベースを確認すると、catalog_product_entity_varchar の製品に関連する次の 3 つのエントリがあります。
value_id entity_type_id attribute_id store_id entity_id 値 888509 4 79 4 35743 /t/e/tempimg_791.jpg 888332 4 80 4 35743 /t/e/tempimg_791.jpg 888333 4 81 4 35743 /t/e/tempimg_791.jpg
フロントエンド ストアには、ベース イメージ、スモール イメージ、サム イメージがあります。次に、次の SQL クエリを実行して、store_id 4 と attribute_id 79 を持つ catalog_product_entity_varchar 内のすべての行を検索し、store_id 0 の対応するエントリを持たず、対応する行を作成するとします。
INSERT INTO catalog_product_entity_varchar (entity_type_id、attribute_id、store_id、entity_id、value) SELECT DISTINCT 4、79、0、エンティティ ID、値 FROM catalog_product_entity_varchar AS cpev WHERE attribute_id = 79 AND store_id != 0 AND entity_id の ( entity_id を選択 FROM catalog_product_entity_varchar WHERE store_id = 4 AND attribute_id = 79 AND entity_id NOT の ( entity_id を選択 FROM catalog_product_entity_varchar WHERE store_id = 0 AND attribute_id = 79 ) ) DUPLICATE KEY UPDATE 値 = cpev.value;
次に、79 を 80 に置き換えてから 81 に置き換えて、同じことを 2 回繰り返します。catalog_product_entity_varchar で次の関連する行を取得します。
value_id entity_type_id attribute_id store_id entity_id 値 888509 4 79 4 35743 /t/e/tempimg_791.jpg 888332 4 80 4 35743 /t/e/tempimg_791.jpg 888333 4 81 4 35743 /t/e/tempimg_791.jpg 888605 4 79 0 35743 /t/e/tempimg_791.jpg 888606 4 80 0 35743 /t/e/tempimg_791.jpg 888607 4 81 0 35743 /t/e/tempimg_791.jpg
画像はカテゴリ リストのフロント エンドに表示されるようになりましたが、製品の管理領域には表示されません。
ここで、次のクエリを実行して、前のクエリで既に設定されている画像を表すエントリを catalog_product_entity_media_gallery に追加します。
INSERT INTO catalog_product_entity_media_gallery (属性 ID、エンティティ ID、値) SELECT 82、entity_id、値 FROM catalog_product_entity_varchar AS cpev WHERE attribute_id = 79 AND store_id = 0 AND entity_id IN ( entity_id を選択 FROM catalog_product_entity_varchar WHERE store_id = 4 AND attribute_id = 79 AND entity_id NOT IN ( entity_id を選択 FROM catalog_product_entity_media_gallery WHERE attribute_id = 82 ) ) DUPLICATE KEY UPDATE 値 = cpev.value;
これが完了すると、再インデックス/再キャッシュが完了します。画像は管理画面に表示されます。
インポート後に画像を適切に機能させるために、4 つの SQL クエリを手動で実行する必要がない適切な方法が必要です。私は何を間違っていますか?
ありがとう。