製品編集画像の役割にもかかわらず、製品画像が表示されない
この記事では、製品編集ページで画像の役割が設定されているにもかかわらず、製品画像がストアフロントに表示されない場合の修正点を紹介します。
原因:複数のストアを持つAdobe Commerce インスタンスでは、一部の製品画像に、画像ロール属性image、small_image、thumbnail、swatchのno_selection値が含まれている場合があります。 このようなno_selection値は、製品画像の役割が、特定のストアのスコープではなくグローバルな全店舗スコープに設定されている場合(つまり、特定の ストアビューではなく すべてのストアビュー に設定されている場合)に表示されます。 それが自分のケースであるかどうかを理解するには、以下の原因 セクションからSQL スクリプトを実行します。
解決策:以下の「解決策」セクションのSQL スクリプトを使用して、そのような画像のno_selection値を持つ行を削除します。
説明 description
環境
- Adobe Commerce オンプレミス 2.X.X
- Adobe Commerce on cloud infrastructure 2.X.X
問題
ストアフロントに製品画像が表示されない場合がありますが、管理パネルの製品ページで画像の役割(基本、小、サムネール、スウォッチ)が正しく設定されています。
ストアビューが すべてのストアビュー に設定された製品ページを確認すると、画像の詳細
ただし、ストアフロントでは、画像は表示されません。特定のストアレベルで製品ページを確認すると( ストアビューを切り替える)、画像はそこにありますが、役割は設定されていません。
原因
マルチストア Adobe Commerce インスタンス(複数のストアを含む)では、一部の製品画像に属性image、small_image、thumbnail、swatchのno_selection値が含まれる場合があります(これらの属性は画像ロールに対応します)。 このようなno_selection値は、製品画像の役割が、特定のストアのスコープではなくグローバルな全店舗スコープに設定されている場合(つまり、特定の ストアビューではなく すべてのストアビュー に設定されている場合)に表示されます。
技術的に言えば、store_id=0 (Adobe Commerce インスタンスのすべてのストアのグローバル設定を保持する)では、商品イメージの役割が設定される場合があります。つまり、属性image、small_image、thumbnail、swatchに有効な値(画像へのパス)が含まれています。 同時に、store_id=1 (特定のストア表現)では、これらの属性の値はno_selectionです。
これが問題であることを確認する方法
次のSQL クエリを実行します。
SELECT `cpev_s`.*, `cpev_0`.`value` AS `store_value` FROM `catalog_product_entity_varchar` `cpev_s` JOIN `eav_attribute` `ea` ON `cpev_s`.`attribute_id` = `ea`.`attribute_id` LEFT JOIN `catalog_product_entity_varchar` `cpev_0` ON `cpev_0`.`row_id` = `cpev_s`.`row_id` AND `cpev_0`.`attribute_id` = `cpev_s`.`attribute_id` AND `cpev_0`.`store_id` = 0 WHERE `cpev_s`.`value` = 'no_selection' AND `ea`.`attribute_code` IN ('image', 'small_image', 'thumbnail') AND `cpev_s`.`store_id` > 0 AND `cpev_s`.`value` != `cpev_0`.`value` AND `cpev_s`.`value` = 'no_selection';
クエリが次のような結果を返す場合は、この記事に記載されている問題に対処しています。
+----------+--------------+----------+--------+--------------+----------------------------+
| value_id | attribute_id | store_id | row_id | value | store_value |
+----------+--------------+----------+--------+--------------+----------------------------+
| 67722 | 87 | 1 | 481 | no_selection | /3/5/355sss1_main.jpg |
| 67723 | 88 | 1 | 481 | no_selection | /3/5/355sss1_main.jpg |
| 67724 | 89 | 1 | 481 | no_selection | /3/5/355sss1_main.jpg |
| 67814 | 87 | 1 | 503 | no_selection | /s/k/skb2031_main.jpg |
| 6769 | 87 | 2 | 503 | no_selection | /s/k/skb2031_main.jpg |
| 67815 | 88 | 1 | 503 | no_selection | /s/k/skb2031_main.jpg |
| 6770 | 88 | 2 | 503 | no_selection | /s/k/skb2031_main.jpg |
| 67816 | 89 | 1 | 503 | no_selection | /s/k/skb2031_main.jpg |
| 6771 | 89 | 2 | 503 | no_selection | /s/k/skb2031_main.jpg |
+----------+--------------+----------+--------+--------------+----------------------------+
9 rows in set (0.06 sec)
なぜこれが起こるのでしょうか?
Adobe Commerce アプリケーションに複数のストアがある場合、特定のストアとグローバルストアの設定の間でデータを同期できない可能性があります。
store_id=1の値は、既定の(グローバル) ストア (store_id=0)よりも優先されます。 したがって、アプリケーションはグローバル画像設定を無視し、画像を表示する際にストアスコープ設定(no_selection)を使用する場合があります。
解決策 resolution
次のSQL スクリプトを使用して、no_selection値を持つ属性を削除します。
DELETE `cpev_s`.* FROM `catalog_product_entity_varchar` `cpev_s` JOIN `eav_attribute` `ea` ON `cpev_s`.`attribute_id` = `ea`.`attribute_id` LEFT JOIN `catalog_product_entity_varchar` `cpev_0` ON `cpev_0`.`row_id` = `cpev_s`.`row_id` AND `cpev_0`.`attribute_id` = `cpev_s`.`attribute_id` AND `cpev_0`.`store_id` = 0 WHERE `cpev_s`.`value` = 'no_selection' AND `ea`.`attribute_code` IN ('image', 'small_image', 'thumbnail') AND `cpev_s`.`store_id` > 0 AND `cpev_s`.`value` != `cpev_0`.`value` AND `cpev_s`.`value` = 'no_selection';
これらの属性が削除されると、特定のストアの役割が設定され、ストアフロントに画像が表示されます。
追加の詳細
Adobe Commerce インスタンスでフルページキャッシュが有効になっている場合、直ちに修正結果を確認することはできません。
変更内容を表示するには、管理者パネルの キャッシュ管理 メニューを使用してページキャッシュを更新します。
詳細
ストアとスコープ
ユーザーガイドの ストアとストア範囲
画像
製品画像🔗をユーザーガイドにアップロードしています
キャッシュ
- ユーザー管理システムガイドの キャッシュ管理。
- 開発者ドキュメントの キャッシュを管理。