У меня есть сайт magento, мои продукты загружаются через CSV-файл. Теперь мне нужно обновить изображения для этих продуктов.
Все мои изображения загружены и сохранены в медиа-папке моего сайта magento. Я создал CSV-файл с «SKU» и «Абсолютный путь» файлов изображений.
Затем я пытаюсь загрузить изображения с помощью следующего кода
<?php
require_once 'app/Mage.php';
Mage::app();
Mage::app()->getStore()->setId(Mage_Core_Model_App::ADMIN_STORE_ID);
$importDir = Mage::getBaseDir('media') . DS . 'Products/Vases/';
$file_handle = fopen("sku_image.csv", "r");
while (($data = fgetcsv($file_handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
$productSKU = $data[0];
$ourProduct = Mage::getModel('catalog/product')->loadByAttribute('sku',$productSKU);
for ($c=1; $c < $num; $c++) {
$fileName = $data[$c];
$filePath = $importDir.$fileName;
if (file_exists($filePath)) {
if ($ourProduct) {
$ourProduct->addImageToMediaGallery($filePath, array('image', 'small_image', 'thumbnail'), true, false);
$ourProduct->save();
}
} else {
echo $productSKU . " not done";
echo "<br>";
}
}
}
fclose($file_handle);
?>
Проблема в том, что последнее изображение настроено на все поля в атрибутах носителя продукта. Как я могу добавить изображения к различным атрибутам мультимедиа с помощью приведенного выше кода.
Я изменил свой код следующим образом
<?php
require_once 'app/Mage.php';
Mage::app();
Mage::app()->getStore()->setId(Mage_Core_Model_App::ADMIN_STORE_ID);
$importDir = Mage::getBaseDir('media') . DS . 'Products/Vases/';
$file_handle = fopen("sku_image.csv", "r");
while (($data = fgetcsv($file_handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
$productSKU = $data[0];
$ourProduct = Mage::getModel('catalog/product')->loadByAttribute('sku',$productSKU);
for ($c=1; $c<$num; $c++) {
$fileName = $data[$c];
$filePath = $importDir.$fileName;
if (file_exists($filePath)) {
if ($ourProduct) {
if ($c==1) {
$ourProduct->addImageToMediaGallery($filePath, 'rotator_image', false, false);
} else {
$ourProduct->addImageToMediaGallery($filePath, null, false, false);
}
$ourProduct->save();
}
} else {
echo $productSKU . " not done";
echo "<br>";
}
}
echo "<br>";
}
fclose($file_handle);
?>
Теперь мой передний сайт потерпел крах. Не могу загрузить любые продукты на моем сайте.
У кого-нибудь есть мысли, чего мне не хватает?
Это потому, что вы в цикле.
Каждый раз, когда вы звоните $ourProduct->addImageToMediaGallery($filePath, array('image', 'small_image', 'thumbnail'), true, false);
изображение, small_image & миниатюры установлены на новое изображение, которое добавляется.
Если вы посмотрите на комментарий к функции, которую вы вызываете, вы увидите, что это написано.
/**
* Add image to media gallery
*
* @param string $file file path of image in file system
* @param string|array $mediaAttribute code of attribute with type 'media_image',
* leave blank if image should be only in gallery
* @param boolean $move if true, it will move source file
* @param boolean $exclude mark image as disabled in product page view
* @return Mage_Catalog_Model_Product
*/
public function addImageToMediaGallery($file, $mediaAttribute=null, $move=false, $exclude=true)
Итак, если вы хотите, чтобы первое изображение использовалось для атрибутов мультимедиа, вы можете добавить проверку прямо перед вызовом addImageToMediaGallery. Затем вы либо передаете null, либо атрибут (ы), которые хотите установить.
Точный метод, который вам нужно будет использовать, будет зависеть от настроек вашего CSV-файла. Приводятся ли в порядок товары и другие подобные вопросы. Затем вы можете выяснить точную проверку для использования.
Привет, лучший и самый быстрый способ импортировать изображения для продуктов — плагин Magmi.
Вы должны поместить все свои изображения в папку / media / import и
просто
в вашем csv создайте столбцы с именем sku small_image base_image и thumbnail
А для столбца изображений просто введите путь к изображению как /imagename.jpg
Обязательно включите плагин процессора атрибутов изображения в magmi. Это сделает импорт за считанные секунды. Вы также можете импортировать изображения продуктов из URL-адресов также через Magmi
http://wiki.magmi.org/index.php?title=Image_attributes_processor
Надеюсь, это поможет
Спасибо
Вы добавляете дополнительные изображения программно, используя следующий скрипт.
$importDir = Mage::getBaseDir('media') . DS;
// additional images
if ($import_product[29] != '') {
$addImages = explode(",", trim($import_product[29]));
foreach ($addImages as $additional_image) {
$image_directory = $dir .DS.'data'.DS. trim($additional_image);
if (file_exists($image_directory)) {
$product->addImageToMediaGallery($image_directory, null, false, false);
} else {
$image_directory = $dir . 'data' . DS . 'comingsoon.jpg';
$product->addImageToMediaGallery($image_directory, null, false, false);
}
}
echo 'Additional images for product ' . $product->getName() . ' ' . $product->getId() . ' imported successfully' . PHP_EOL;
}