8

在 magento 的最新版本(1.7)中,有一个设置客户团体价格的选项,但是我找不到任何关于如何以编程方式执行此操作的文档。我尝试了以下代码,但没有成功。有人知道如何设置客户团体价格吗?

    $_product->setCustomerGroupId($_price->getCustomerGroupId());
$_product->setGroupPrice($price);
$_product->save();
4

2 回答 2

19

如果您实际上使用的是 magento 对象(而不是 api),这些是我发现的行为。希望应用程序有意义,无论您如何获取数据。

// get my product 
$product = Mage::getModel('catalog/product')->load(x);
// the group data is expecting an array of arrays that look like.. 
// array ('website_id'=>y, 'cust_group'=>z, 'price'=>n)
$groupPricingData = array (
  // for website 2, customer group 2
  array ('website_id'=>2, 'cust_group'=>2, 'price'=>10),
  // for all websites, not logged in
  array ('website_id'=>0, 'cust_group'=>0, 'price'=>15)
);
$product->setData('group_price',$groupPricingData);
$product->save();

在此示例中,它将替换该产品的所有先前组定价,因此同样明智。

$product->setData('group_price',array());
$product->save();

将取消团体定价。

我注意到的另一种与在您正在更新的产品上设置商店 ID 相关的行为将导致附加组价格。这样,如果您要为特定商店上传一堆团体定价,您不必担心会丢失针对另一家商店的团体定价。

// add a pricing to store 4
$product = Mage::getModel('catalog/product')->setStoreId(4)->load(1234);
$product->setData('group_price',array (
    array (
        "website_id" => 3,
        "cust_group" => 4,
        "price" => 99
    )));
$product->save();

// add a pricing to store 1
$product = Mage::getModel('catalog/product')->setStoreId(1)->load(1234);
$product->setData('group_price',array (
    array (
        "website_id" => 1,
        "cust_group" => 2,
        "price" => 105
    )));
$product->save();

// remove group pricing from store 2
$product = Mage::getModel('catalog/product')->setStoreId(2)->load(1234);
$product->setData('group_price',array ());
$product->save();

如果您正在处理单个商店的批量团体定价,这很方便,但不要影响其他商店的团体定价。我不知道这是否是最简单的机制,但到目前为止它对我有用。

于 2012-06-13T19:19:59.833 回答
4

好吧,我终于想通了,对于那些正在寻找解决方案的人:您需要制作一组数据,包括 website_id、cust_group、price 和如果需要删除。这在新的 magento 版本(v1.7)中可用

    $group_prices = array(); if(isset($price_data['delete'])) {
                                $group_prices[] = array(
                                    "website_id" => Mage::getModel('core/store')->load($price_data['store_id'])->getWebsiteId(),
                                    "cust_group" => $price_data['customer_group_id'],
                                    "all_groups" => false,
                                    "delete" => true
                                );
                            } else {
                                $group_prices[] = array(
                                    "website_id" => Mage::getModel('core/store')->load($price_data['store_id'])->getWebsiteId(),
                                    "cust_group" => $price_data['customer_group_id'],
                                    "all_groups" => false,
                                    "price" => $price_data["price"]
                                );
                            }
于 2012-05-24T20:00:46.007 回答