すべての保存画像をマゼントのベース、小さく、サムネイル画像にしますか?
-
30-09-2019 - |
質問
約3,000の製品を備えたMagentoストアがあります。これらの製品のほとんどすべてには、単一の画像が付属しています。
何らかの理由で、小さな画像とサムネイルの画像をインポートCSVファイルのベース画像と同じように設定しましたが、各製品に対してベース画像のみが設定されます。これは、製品を検索するとプレースホルダーを取得することを意味しますが、製品ページに入ると正しい画像が表示されます。これは、製品管理者ページに移動し、小さな画像とサムネイル用のボックスを選択することで簡単に改善できます。
問題は、3,000の画像で手動で行うのにかなり長い時間がかかることです。 SQLコマンドを見つけました したほうがいい すべてのベース、小さく、サムネイル画像を作成します。各製品の最初の画像をマッピングします。私は各製品に1つの画像しか持っていないので、これは完璧でなければなりません。ただし、何もしません。 0行が変更されたと書かれています。
UPDATE catalog_product_entity_media_gallery AS mg,
catalog_product_entity_media_gallery_value AS mgv,
catalog_product_entity_varchar AS ev
SET ev.value = mg.value
WHERE mg.value_id = mgv.value_id
AND mg.entity_id = ev.entity_id
AND ev.attribute_id IN (70, 71, 72)
AND mgv.position = 1
なぜこれが機能していないのか知っている人はいますか?
ありがとう、
ダニー
解決
データベースにそのような変更を加えた後、成功したとしても、キャッシュ管理の画像キャッシュを再構築する必要があります。
このようなスクリプトでそれを行うことができ、キャッシングやインデックス作成について心配しないかもしれません。
<?php
require 'app/Mage.php';
Mage::app();
$products = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*');
foreach ($products as $product) {
if (!$product->hasImage()) continue;
if (!$product->hasSmallImage()) $product->setSmallImage($product->getImage());
if (!$product->hasThumbnail()) $product->setThumbnail($product->getImage());
$product->save();
}
?>Done!
これをMagentoディレクトリに保存し、URLをブラウザのアドレスバーに入力してアクセスします。私はまだこのスクリプトをテストしていません。
他のヒント
このスクリプトを試してみたい人(私のように!)への警告として。私は考えずにこれを実行し、それはすべての製品名を変更しました!
- 属性パネルに移動し、画像/小さな画像/サムネイル属性を見つけます。
- IDSのメモ(この場合の私のものは85,86と87でした)
- クエリを変更して、それらのIDを反映します。
だから私の質問は次のように見えます:
UPDATE catalog_product_entity_media_gallery AS mg,
catalog_product_entity_media_gallery_value AS mgv,
catalog_product_entity_varchar AS ev
SET ev.value = mg.value
WHERE mg.value_id = mgv.value_id
AND mg.entity_id = ev.entity_id
AND ev.attribute_id IN (85,86,87)
AND mgv.position = 1;
私はこれが古い投稿であることを知っていますが、誰かが同じ問題を抱えている場合に備えて、問題はev.attribute_idにありました。以下の更新コード:
UPDATE
catalog_product_entity_media_gallery AS mg,
catalog_product_entity_media_gallery_value AS mgv,
catalog_product_entity_varchar AS ev
SET
ev.value = mg.value
WHERE
mg.value_id = mgv.value_id
AND mg.entity_id = ev.entity_id
AND ev.attribute_id IN (74, 75, 76)
AND mgv.position = 1
ありがとう。
Magento 1.7.0.2でStereo_Worldの方法を使用しましたが、うまくいきました。 (私はstackoverflowを初めて使用するので、彼の答えを賛成することはできません)
属性パネルの属性IDがどこに表示されているかはわかりません。数値IDがまったく表示されないためです。 phpmyAdminを開き、eav_attributeテーブルを見ることにより、ID(85,86,87)を見つけました。
ClockWorkGeekが指摘したように - Reindex/Cache Flushが必要です。
@user2321249 CE 1.9.1で属性IDを見つけるには、属性情報ページに移動してURLを確認します。たとえば、Admin BackEndから、属性の管理を選択します。サムネイル属性を見つけて選択します。私のシステムでは、URLは次のとおりです。
www.example.com/magento/index.php/admin/catalog_product_attribute/edit/属性_ID/87/key/f759b57c21a7c75f33095a243f44b2a5/
私のシステムのサムネイル属性_IDが87であることを簡単に伝えることができます。ベースイメージと小さな画像についても同じことを行います。
Magento 1.9.2.2バージョンの次のトリックを使用して機能しました。
INSERT INTO catalog_product_entity_varchar
(entity_type_id, attribute_id, store_id, entity_id, value)
SELECT
entity_type_id, 75, store_id, entity_id, value
FROM
catalog_product_entity_varchar
WHERE
attribute_id = 74
次に、値75を76に置き換え、クエリをもう一度インポートします。属性ID値を自分のものに置き換えてください