Программно установить/изменить изображение миниатюры на другую из галереи
-
16-10-2019 - |
Вопрос
У меня есть огромный каталог продуктов, в которых есть около 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();