2

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 クエリを手動で実行する必要がない適切な方法が必要です。私は何を間違っていますか?

ありがとう。

4

1 に答える 1

1

恥ずかしくて腹立たしい-app/code / core / Mageを削除し、そのフォルダーの新しくダウンロードしたコピーに置き換えることで修正しました。一部のコアファイルが編集され、その過程で壊れたようです。

物語の教訓-コアを編集しないでください。

于 2012-08-15T13:35:53.953 に答える