8

Magento の最新バージョン (1.7) には、顧客グループの価格を設定するオプションがありますが、これをプログラムで行う方法に関するドキュメントは見つかりません。次のコードを試しましたが、うまくいきませんでした。顧客グループの価格を設定する方法を知っている人はいますか?

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

2 に答える 2

19

実際に (API ではなく) magento オブジェクトを使用している場合、これらは私が見つけた動作です。どのようにデータを取得しているかに関係なく、アプリケーションが理にかなっていることを願っています。

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

これは、1 つのストアでグループ価格設定のバッチを処理している場合に便利ですが、他のストアのグループ価格設定に影響を与えるものではありません。これが最も単純なメカニズムかどうかはわかりませんが、これまでのところうまくいきました。

于 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 に答える