Сделать все изображения магазина базовыми, маленькими и миниатюрными изображениями в Magento?

У меня есть магазин Magento, в котором около 3000 товаров. Почти ко всем этим продуктам прикреплено одно изображение.

По какой-то причине, хотя я установил маленькое изображение и миниатюру изображения так же, как базовое изображение в файле CSV импорта, для каждого продукта установлено только базовое изображение. Это означает, что при поиске продукта вы получаете заполнитель, но как только вы переходите на страницу продукта, вы получаете правильное изображение. Это можно легко исправить, зайдя на страницу администрирования продукта и выбрав поля для маленького изображения и миниатюры.

Проблема в том, что с 3000 изображений это займет довольно много времени, чтобы сделать вручную. Я нашел команду SQL, которая должна заставить все базовые, маленькие и миниатюрные изображения отображать первое изображение для каждого продукта. Поскольку у меня есть только одно изображение для каждого продукта, это должно быть идеально. Тем не менее, это ничего не делает. Это говорит, что 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

Кто-нибудь знает, почему это не работает?

Спасибо,

Дэнни

6 ответов

Решение

После внесения таких изменений в базу данных, даже в случае успеха, вам нужно будет перестроить кэш изображений в Cache Management.

Возможно, вы сможете сделать это с помощью такого скрипта и не беспокоиться о кэшировании или индексации.

<?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-адрес в адресную строку браузера. Я еще не тестировал этот скрипт.

Так же, как предупреждение для любого (как я!), Кто хочет попробовать этот сценарий. Я запустил это, не задумываясь, и это изменило все названия продуктов!

  1. Зайдите в вашу панель атрибутов, найдите атрибуты image / small image / thumbnail.
  2. Запишите идентификаторы (мои в этом случае были 85,86 и 87)
  3. Измените запрос, чтобы отразить эти идентификаторы.

Итак, мой запрос выглядит так:

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

Благодарю.

Я использовал метод Stereo_world на magento 1.7.0.2, и он работал отлично. (Я не могу высказать его ответ, потому что я новичок в stackru)

Я не знаю, где он видит идентификатор атрибута на панели атрибутов, потому что там я вообще не вижу числового идентификатора. Я нашел идентификаторы (85,86,87), открыв phpMyAdmin и заглянув в таблицу eav_attribute.

Как указывал clockworkgeek - необходима переиндексация / очистка кеша.

Я получил его, используя следующий трюк для версии 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 и снова импортируйте запрос. Обязательно замените значения идентификатора атрибута на свои

@user2321249 Чтобы найти идентификатор атрибута в CE 1.9.1, перейдите на страницу информации об атрибуте и посмотрите URL. Например, в бэкэнде Admin выберите Каталог-> Управление атрибутами. Найдите атрибут эскиза и выберите его. В моей системе URL-адрес:

www.example.com/magento/index.php/admin/catalog_product_attribute/edit/attribute_id / 87/ key / f759b57c21a7c75f33095a243f44b2a5 /

Вы можете легко сказать, что thumbnail attribute_id в моей системе - 87. Сделайте то же самое для Базового изображения и Маленького изображения.

Другие вопросы по тегам