magento - Обновить изображение продукта по умолчанию до первого изображения в галерее изображений

У меня есть скрипт импорта, который импортирует более 2000+ продуктов, включая их изображения. Я запускаю этот скрипт через интерфейс командной строки, потому что считаю, что это лучший способ ускорить работу, даже несмотря на то, что у меня есть тот же скрипт импорта, доступный и исполняемый в администраторе magento в качестве расширения. Скрипт работает довольно хорошо. Практически идеально! Однако иногда addToImageGallery каким-то образом дает сбой и приводит к тому, что некоторые изображения имеют No Image в качестве изображения продукта по умолчанию, а единственное другое изображение вообще не выбрано в качестве изображения по умолчанию. Как выполнить массовое обновление всех продуктов, чтобы установить первое изображение в галерее мультимедиа для продукта в качестве «базового», «изображения» и «миниатюры» по умолчанию?


person Seth Malaki    schedule 03.06.2012    source источник


Ответы (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;

Итак, я взял на себя обязательство, запустил его и... вуаля! Все исправлено! Вы также можете инкапсулировать это в транзакцию, если хотите. Но это выходит за рамки этого вопроса.

Ну, это исправление, которое работало для меня до сих пор! Если есть еще, поделитесь!

person Seth Malaki    schedule 03.06.2012
comment
по какой-то причине это устанавливает только маленькое и миниатюрное изображение. по какой-то причине базовое изображение не устанавливается. я подтвердил, что идентификаторы атрибутов в catalog_product_entity_varchar равны 78, 80 и 81. есть идеи, почему это может быть так? - person VinnyD; 30.11.2012
comment
Это странно, я использовал эту технику буквально десятки раз, и ни разу она еще не потерпела неудачу.. Возможно, какую версию вы используете? - person Seth Malaki; 25.12.2012
comment
Привет Сет, не могли бы вы поделиться скриптами загрузки ваших продуктов. Поскольку я новичок, и это очень запутанно для понимания. - person Rahul; 28.04.2016

Там было:

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) # ‹-- здесь обновлены идентификаторы атрибутов

Ищет что-то похожее.

person Rafal    schedule 09.04.2013