У меня есть скрипт импорта, который импортирует более 2000+ продуктов, включая их изображения. Я запускаю этот скрипт через интерфейс командной строки, потому что считаю, что это лучший способ ускорить работу, даже несмотря на то, что у меня есть тот же скрипт импорта, доступный и исполняемый в администраторе magento в качестве расширения. Скрипт работает довольно хорошо. Практически идеально! Однако иногда addToImageGallery
каким-то образом дает сбой и приводит к тому, что некоторые изображения имеют No Image
в качестве изображения продукта по умолчанию, а единственное другое изображение вообще не выбрано в качестве изображения по умолчанию. Как выполнить массовое обновление всех продуктов, чтобы установить первое изображение в галерее мультимедиа для продукта в качестве «базового», «изображения» и «миниатюры» по умолчанию?
magento - Обновить изображение продукта по умолчанию до первого изображения в галерее изображений
Ответы (2)
Я нашел пару трюков, как сделать это (и многое другое) по этой ссылке:
http://www.magentocommerce.com/boards/viewthread/59440/ (Спасибо переход!)
Хотя для Magento 1.6.2.0 (которую я использую) первый трюк SQL (Трюк 1 — Автоматическая установка базы по умолчанию, миниатюры, маленького изображения на первое изображение.) нуждается в небольшой модификации.
В предпоследней строке есть часть AND ev.attribute_id IN (70, 71, 72)
. Это должно указывать на идентификаторы атрибутов, которые, вероятно, больше не будут актуальны в Magento 1.6.2.0. Чтобы исправить это, используя любой инструмент запросов MySQL (PHPMyAdmin или MySQL Query Browser), я взглянул на таблицу catalog_product_entity_varchar
. Должны быть такие записи:
value_id, entity_type_id, attribute_id, store_id, entity_id, value
..
146649, 4, 116, 0, 1, '2'
146650, 4, 76, 0, 1, ''
146651, 4, 78, 0, 1, ''
146652, 4, 79, 0, 1, '/B/0/B05-01.jpg'
146653, 4, 80, 0, 1, '/B/0/B05-01.jpg'
146654, 4, 81, 0, 1, '/B/0/B05-01.jpg'
146655, 4, 96, 0, 1, ''
146656, 4, 100, 0, 1, ''
146657, 4, 102, 0, 1, 'container2'
..
Мои деньги были на группе из трех путей изображения в качестве возможных замен. Таким образом, результирующий SQL теперь должен быть:
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 (79, 80, 81) # <-- attribute IDs updated here
AND mgv.position = 1;
Итак, я взял на себя обязательство, запустил его и... вуаля! Все исправлено! Вы также можете инкапсулировать это в транзакцию, если хотите. Но это выходит за рамки этого вопроса.
Ну, это исправление, которое работало для меня до сих пор! Если есть еще, поделитесь!
Там было:
146652, 4, 79, 0, 1, '/B/0/B05-01.jpg'
146653, 4, 80, 0, 1, '/B/0/B05-01.jpg'
146654, 4, 81, 0, 1, '/B/0/B05-01.jpg'
Так должно быть:
И ev.attribute_id IN (79, 80, 81) # ‹-- здесь обновлены идентификаторы атрибутов
вместо:
И ev.attribute_id IN (78, 80, 81) # ‹-- здесь обновлены идентификаторы атрибутов
Ищет что-то похожее.