Программно установить/изменить изображение миниатюры на другую из галереи

magento.stackexchange https://magento.stackexchange.com/questions/11068

Вопрос

У меня есть огромный каталог продуктов, в которых есть около 4 изображений на продукт с той же структурой именования, что является чем -то вроде "xxxxxx_fr.jpg" "xxxxxx_bk.jpg" "xxxxxx_fl.jpg", где x представляет идентификатор продукта и FR, Bk, FL стойте для спереди, назад, полной длины и т. Д.

В настоящее время базовые, малые и миниатюры - все на изображениях FR, но я пытаюсь изменить только миниатюр для каждого продукта на изображение FL из галереи программатически. Я приближаюсь к этому, создавая индивидуальную коллекцию продуктов, проходя через продукты, а затем загружая следующее:

foreach ($_productCollection as $product){
   $workingProduct = Mage::getModel('catalog/product')->load($productID);
   $gallery = $workingProduct->getMediaGalleryImages();  
   $cameraAngle = str_replace(".jpg","",explode("_",$image->getUrl())); //This results in string that is just FR, BK, FL etc.

if (strtolower($cameraAngle[1]) == 'fl') {
//I have tried both of the below methods
$workingProduct->setThumbnail($image->getUrl());
$product->addImageToMediaGallery($image->getUrl(),array('thumbnail'),false,false);
 $workingProduct->save();
}    
}

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

Это было полезно?

Решение 2

Мое решение было для тех, кто смотрел ...

   foreach ($gallery as $image){
        $cameraAngle = str_replace(".jpg","",explode("_",$image->getUrl()));

        if (strtolower($cameraAngle[1]) == 'fl') {               
            Mage::getSingleton('catalog/product_action')->updateAttributes(array($workingProduct->getId()), array('thumbnail'=>$image['file']), 0);

        }

Другие советы

Если я правильно вас понимаю, вы просто хотите изменить FR на FL для миниатюры?

Просто сделай это:

$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('thumbnail);
foreach($collection as $product) {
    $product->setThumbnail(str_replace('_FR', '_FL', $product->getThumbnail());
}
$collection->save();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top