Программное обновление Меток Изображений
Я пытаюсь обновить этикетки на изображениях моих продуктов. Я хочу, чтобы они совпадали с названием продукта.
Что я пробовал
$mediaModel = Mage::getModel("catalog/product_attribute_backend_media");
$images = $product->getMediaGalleryImages();
foreach ($images as $image) {
$mediaModel->updateImage(
$product->getId(),
$image->getFile(),
array("label" => $title)
);
}
Но потом я получаю эту ошибку
Неустранимая ошибка: Вызов функции-члена getAttributeCode() для не-объекта в app/code/core/Mage/Catalog/Model/Product/Attribute/Backend/Media.php в строке 401
Я тоже пробовал
$mediaModel = Mage::getModel("catalog/product_attribute_media_api");
$images = $mediaModel->items($product->getId());
foreach ($images as $image) {
$mediaModel->update(
$product->getId(),
$image['file'],
array("label" => $title)
);
}
, который работает нормально, но значения не обновляются в администратор.
Как мне это сделать?
2 answers
Следующий код должен работать для вас.
$product = mage::getModel('catalog/product')->load(16);
$attributes = $product->getTypeInstance(true)->getSetAttributes($product);
$gallery = $attributes['media_gallery'];
$images = $product->getMediaGalleryImages();
foreach ($images as $image) {
$backend = $gallery->getBackend();
$backend->updateImage(
$product,
$image->getFile(),
array('label' => 'Blah')
);
}
$product->getResource()->saveAttribute($product, 'media_gallery');
Я получал ошибку просто при $product->save(); но сохранение одного атрибута, похоже, работает.
Приведенный выше код не сработал для меня. Вот измененный код, который в конечном итоге работает:
function _SetProductImagesAlt($product, $altText='') {
if (is_numeric($product))
{
$product = mage::getModel('catalog/product')->load($product);
}
else //reload the product
{
$product = mage::getModel('catalog/product')->load($product->getId());
}
//set alt to the name of the Product if not set otherwise
if (empty($altText))
{
$altText = $product->getName();
}
//sanitize string
$altText = str_replace("\r", "", $altText);
$altText = str_replace("\n", "", $altText);
$altText = htmlspecialchars($altText, ENT_QUOTES, 'UTF-8');
$attributes = $product->getTypeInstance(true)->getSetAttributes($product);
$images = $product->getMediaGalleryImages();
$mediaGalleryBackendModel = $attributes['media_gallery']->getBackend();
foreach ($images as $image) {
$mediaGalleryBackendModel->updateImage($product, $image->getFile(), array('label' => $altText));
}
$product->save();
}
Примечание: перезагрузка объекта product в строке 8 оказалась важной, если вы использовали тот же объект для добавления нового продукта заранее.