首页 文章

Magento - 更新价格脚本 - 多个商店

提问于
浏览
0

我试图将一些(但不是全部)价格从一个商店更新到另一个商店 . 例如,一条衬衫应该是第二家商店价格的1.2倍

我想仅根据实体标签更新一些项目组,但我正在努力从magento中提取所有数据(在下面的代码中确定我能得到什么) . 我缺少的是价格和实体标签 . 我知道他们住在哪些表但不确定正确的magento语法来访问它们,例如Mage :: getModel('catalog / product')我试图使用Magento友好代码实现这一点,而不是查询

使用企业1.11,而不是在现阶段购买插件,任何建议都非常感谢

$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); #important
$product_id = '8782';
$collection = Mage::getModel('catalog/product')
         ->load($product_id);
        echo "Collection: " . $collection->getName();
        echo "<br>";
        echo "Attribute Set: " . $collection->getAttributeSetId() . " SKU: " . $collection->getSku();
        echo "<br>"; 
        echo "Entity ID: " . $collection->getEntity_id() . " Product Type (Attribute Label): " . $collection->getProducttype();

1 回答

  • 3

    只是说明一下:

    在您展示的示例中,$ collection对象实际上不是“集合” . 它是一个“目录/产品”对象的实例 .

    要修改一个目录/产品对象的价格,您将看到这样的事情:

    $product = Mage::getModel('catalog/product')->load($product_id);
    $product->setPrice($product->getPrice() * 1.2)
            ->save();
    

    如果你想在一堆产品上执行此操作,那么应用一些属性过滤器(归结为将WHERE子句添加到最终生成的SQL) . (magento集合查询语法的Here's one summary . )

    我不确定你所说的“实体标签”是什么意思 . 这是您附加到产品的自定义属性吗?

    一般示例,将此价格变化应用于具有特定SKU的所有产品:

    $product_collection = Mage::getModel('catalog/product')->getCollection()
                                                           ->addAttributeToFilter('sku', array('like' => 'FOO01-%'));
    
    foreach($product_collection as $product) {
    
        $new_price = calcNewPrice($product->getPrice());
        $product->setPrice($new_price)
                ->save(); 
    
    }
    

    在哪里,如果您要跨越商店进行价格计算,“calcNewPrice”可能看起来像这样:

    function calcNewPrice($product) {
        $other_store_product = Mage::getModel('catalog/product')->setStoreId($other_store_id)
                                                                ->load($product->getId());
        if ($other_store_product) {
            return $other_store_product->getPrice() * 1.2;
        }
        // else ???
    }
    

    希望这可以帮助 .

相关问题