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();
4

1 回答 1

3

只是澄清:

在您展示的示例中, $collection 对象并不是真正的“集合”。它是一个“目录/产品”对象的实例。

要修改一个目录/产品对象的价格,您会考虑执行以下操作:

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

如果您想对一堆产品执行此操作,您可能需要使用“目录/产品”对象的集合,并应用一些属性过滤器(归结为将 WHERE 子句添加到最终生成的 SQL 中)。(这是 magento 集合查询语法的一个摘要。)

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

一个通用示例,将此价格更改应用于具有特定 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 ???
}

希望这可以帮助。

于 2012-11-07T14:03:14.527 回答