【问题标题】:Magento 1.7 - setting customer group price programmaticallyMagento 1.7 - 以编程方式设置客户组价格
【发布时间】:2012-05-15 14:30:25
【问题描述】:

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

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

【问题讨论】:

    标签: magento


    【解决方案1】:

    如果您实际使用的是 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();
    

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

    【讨论】:

    • 在加载产品后尝试使用$product->getData('tier_price');,然后将数组添加到您的数组中,您可以保存而不会覆盖现有的数组。编辑:在 EE 中似乎是 tier_price,在 CE 中似乎是 group_price
    • 分级定价和团体定价是两个完全不同的功能。分级定价允许“以 5 美元/个购买 1 个或以 4 美元/个购买 5 个”方案。团体定价允许“普通客户支付 5 美元,VIP 客户支付 4 美元”的场景(与数量无关)。团体定价是在 CE 1.7 和 EE 1.12 中引入的,在旧版本中不可用。
    【解决方案2】:

    好吧,对于那些正在寻找解决方案的人,我终于想通了:您需要制作一个数据数组,包括 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"]
                                    );
                                }
    

    【讨论】:

    • 这个答案真的没有帮助。你在哪里传递那个数组,因为如果我使用一些产品 API 方法,它会忽略组价格数组,而保存层价格数组,它的设置类似。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    相关资源
    最近更新 更多