我写了一个模块,可以自动翻译我的内容。我的产品图片有问题,我只需保存一个字段:media_gallery。
这就是我的所作所为:
public function translateAltProducts($idProduct) {
$bingModel = Mage::getModel('autotranslation/bing');
// For each foreign store
$allStores = Mage::app()->getStores();
foreach ($allStores as $_eachStoreId => $val) {
$_storeId = Mage::app()->getStore($_eachStoreId)->getId();
if($_storeId!=1) {
// Load product
$_product = Mage::getModel('catalog/product')->setStoreId($_storeId)->load($idProduct);
// Get images
$gallery = $_product->getData('media_gallery');
// For each image
foreach($gallery['images'] as &$image) :
// Do translation
$translation = false;
$nbr = 0;
do {
$translation = $bingModel->translateTitle($image['label'], $this->fromLanguage, $_storeId);
if(++$nbr==3) die('erreur ' . $idProduct);
}
while($translation===false);
// If got translation
$image['label'] = $translation;
endforeach;
// Save translation
$_product->addAttributeUpdate('media_gallery', $gallery, $_storeId);
}
}
}
我通常使用“$ _product-> addAttributeUpdate()”来单独更新某个字段,但这里不起作用。
如果我使用$ _product-> setData('media_gallery',$ gallery)& $ _product-> save()它有效,但我丢失了所有预填字段“使用默认值”。
如果您有任何想法......
谢谢,
的Aurelien
答案 0 :(得分:0)
我建议您尝试使用Singleton访问目录/产品模型,这样就不会丢失您保存的早期数据。
$_product = Mage::getSingleton('catalog/product')->setStoreId($_storeId)->load($idProduct);
答案 1 :(得分:0)
终于有效了:
$idProduct = 13344;
$_storeId = 2;
$mediaApi = Mage::getModel("catalog/product_attribute_media_api");
$_product = Mage::getSingleton('catalog/product')->setStoreId($_storeId)->load($idProduct);
$items = $mediaApi->items($_product->getId());
foreach($items as $item) {
$item['label'] = 'My cool translation';
$mediaApi->update($_product->getId(), $item['file'],$item, $_storeId);
}