Magento - 仅保存产品媒体库

时间:2014-05-09 13:17:15

标签: magento module

我写了一个模块,可以自动翻译我的内容。我的产品图片有问题,我只需保存一个字段: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

2 个答案:

答案 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);
}

感谢stackexchange