Magento - 模块不会根据每个网站更新价格

问题描述 投票:0回答:3

我在使用一个应该按网站更新价格的模块时遇到了问题。

在我的模块顶部,我有:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

这应该意味着当我调用模块(该模块有一个前端)时,我可以以“管理员”身份更新价格等。然而,这并没有发生。目前,我已经做了一些绝望的努力来让它工作 - 看看数字格式是否会出错或索引未重新索引、缓存问题和其他任何问题。

以下代码片段实际上产生了正确的数字,但它只是没有保存到数据库中。有什么想法吗?

$product = Mage::getModel('catalog/product')->
           setStoreId($storeId)->setWebsiteId($websites[$store])->
           loadByAttribute('sku',$price['SKU']);
$oldprice=(float)str_replace(",","",$product->getPrice());

if($newprice!=$oldprice) {
    Mage::log($product->getPrice());
    $product->setPrice(number_format($newprice,4,".",""));
    Mage::log($product->getPrice());
    $product->getResource()->saveAttribute($product, 'price');
    $product->save();
    Mage::log($product->getPrice());
    unset($product);
}
php magento
3个回答
8
投票

假设您正在使用模块类中的方法更新产品价格,示例代码如下:-

public function updateProductPrices ($sku, $newPrice) {
    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

    $websites = Mage::app()->getWebsites();

    $product = Mage::getModel('catalog/product')
    $productId = $product->getIdBySku($sku);

    foreach ($websites as $_eachWebsite) {
        $_websiteId = $_eachWebsite->getWebsiteId();

        $websiteObj = new Mage_Core_Model_Website();
        $websiteObj->load($_websiteId);

        $storeIds = $websiteObj->getStoreIds();

        if (count($storeIds)) {
            foreach ($storeIds as $_eachStoreId) {
                $product->setStoreId($_eachStoreId)
                        ->load($productId);

                $oldPrice = $product->getPrice();

                if ($oldPrice != $newPrice) {
                    $product->setPrice($newPrice);
                    $product->save();
                }
            }
        }

        unset($storeIds, $websiteObj, $_websiteId);
    }

    unset($product);
}

希望有帮助。


0
投票

尝试:

$product->setPrice($newprice)->save();

0
投票

我遇到了类似的问题,我认为知识渴望的答案中有一个错误。该代码实际上不会针对每个网站进行更新,而是为每个网站更新一个唯一的价格

我所说的错误实际上是用类似的代码发生在我身上的,并且其他产品属性将与默认值取消链接(至少,这是发生在我身上的事情)。

以下是基于Knowledge Craving的解决方案的建议,我只是修改了一点

public function updateProductPrices ($sku, $newPrice, $websiteId) {
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$product = Mage::getModel('catalog/product')
$productId = $product->getIdBySku($sku);


    $websiteObj = new Mage_Core_Model_Website();
    $websiteObj->load($websiteId);

    $storeIds = $websiteObj->getStoreIds();

    if (count($storeIds)) {
        foreach ($storeIds as $_eachStoreId) { //Does it need to do for each storeview, price being anyway website scope?
            $product->load($productId);

            $oldPrice = $product->getPrice();

            if ($oldPrice != $newPrice) { //actually, this if would not be necessary as you anyway want to update, right?
                $product->setStoreId($_eachStoreId)
                    ->setPrice($newPrice)
                    ->save();

            }
        }
    }

 unset($productId, $storeIds, $websiteObj, $product);
 }
© www.soinside.com 2019 - 2024. All rights reserved.