Magento:根据客户群获得产品价格

时间:2012-09-07 23:56:52

标签: php magento product rule magento-1.7

关于magento 1.7 我为“特殊会员”客户群制定了20%折扣的促销价格规则。

我想显示两个价格。我以为会有像

这样的东西
$_product->getPriceByCustomerGroup( $groupId );

目标

(未登录):

  • 正常价格:10.99美元
  • 会员价:5.99美元

(会员登录):

  • 正常价格:10.99美元
  • 会员价:5.99美元

6 个答案:

答案 0 :(得分:6)

好吧,周围有点脏,但我想我有。

您可以通过为产品调用setCustomerGroupId来获取特定组ID的价格(在下面的情况下为3)。唯一需要注意的是,一旦调用了setCustomerGroupId函数,就无法将客户组ID设置为不同的组并获得该组的价格 - 它将价格设置一次然后不会覆盖它。

在下面的示例中,我的产品的正常价格为399.99美元,适用于除组ID 3以外的所有组。对于组ID 3,我有一个目录价格规则设置为20%的折扣。

如果我运行下面的代码,我会得到:

product A: 399.99
product B (group id 3): 319.9900
product B (group id 0): 319.9900

请注意我第二次设置客户群时它不会改变价格

$_productA = $this->getProduct();

$_productB = Mage::getModel('catalog/product')->load($_productA->getId());  
$_productB->setCustomerGroupId(3);

echo 'product A: '.$_productA->getFinalPrice().'<br/>';
echo 'product B (group id 3): '.$_productB->getFinalPrice().'<br/>';

$_productB->setCustomerGroupId(0);

echo 'product B (group id 0): '.$_productB->getFinalPrice().'<br/>';

第二次幸运:)

答案 1 :(得分:6)

在黑客攻击一段时间后,我已经完成了自己的愿望

$now = Mage::getSingleton('core/date')->timestamp( time() );
$websiteId = Mage::app()->getStore()->getWebsiteId();
$customerGroup = 4;

Mage::getResourceModel('catalogrule/rule')->getRulePrice( $now, $websiteId, $customerGroup, $_productId);

答案 2 :(得分:3)

这里有我解决这个问题的方法。 我还添加了关于其他解决方案和一些有用技巧的评论。

<?php
//Get the product
$_product = $this->getProduct();
//or load it from the DB by product ID: $_product = Mage::getModel('catalog/product')->load($_id);

$qty = 1; //price for only one item
Mage::log("Current customer GroupID ('0' for Not Logged In): ".Mage::getSingleton('customer/session')->getCustomerGroupId());
Mage::log("Initial Product price GroupID (always = Null): ".$_product->getCustomerGroupId());
Mage::log("Initial Product price: ".$_product->getPriceModel()->getFinalPrice($qty, $_product));

$NonMember_gr=1; //"1" - is default group for logged in customers
$Member_gr=2;
$_product->setCustomerGroupId($NonMember_gr);
$NonMemberPrice = $_product->getPriceModel()->getFinalPrice($qty, $_product);
Mage::log("Product Group changed to: ".$_product->getCustomerGroupId());
Mage::log("Non-member price is: ".$NonMemberPrice);

$_product->setCustomerGroupId($Member_gr);
$MemberPrice = $_product->getPriceModel()->getFinalPrice($qty, $_product);
Mage::log("Product Group changed to: ".$_product->getCustomerGroupId());
Mage::log("Member price is: ".$MemberPrice);

$_product->setCustomerGroupId(Mage::getSingleton('customer/session')->getCustomerGroupId());
Mage::log("Product Group returned to: ".$_product->getCustomerGroupId());
Mage::log("Price returned to: ".$_product->getPriceModel()->getFinalPrice($qty, $_product));
?>

之后,您将拥有日志文件:

2013-12-05T03:01:10+00:00 DEBUG (7): Current customer GroupID ('0' for Not Logged In): 0
2013-12-05T03:01:10+00:00 DEBUG (7): Initial Product price GroupID (always = Null): 
2013-12-05T03:01:10+00:00 DEBUG (7): Initial Product price: 55
2013-12-05T03:01:10+00:00 DEBUG (7): Product Group changed to: 1
2013-12-05T03:01:10+00:00 DEBUG (7): Non-member price is: 40.0000
2013-12-05T03:01:10+00:00 DEBUG (7): Product Group changed to: 2
2013-12-05T03:01:10+00:00 DEBUG (7): Member price is: 25.0000
2013-12-05T03:01:10+00:00 DEBUG (7): Product Group returned to: 0
2013-12-05T03:01:10+00:00 DEBUG (7): Price returned to: 55

如果您没有定义团体价格,它将只返回一般价格

因此,每次更改GID时,此函数都会返回客户GID的正确价格

$price = $_product->getPriceModel()->getFinalPrice($qty, $_product);

请注意此功能,因为当您最初设置产品客户组ID时(null为$ gid),它将仅返回正确的价格

$price = $_product->getFinalPrice();

还要小心德米特里的解决方案,因为它会返回“原始”产品组价格。这意味着必须为产品定义集团价格,并且此价格不受目录规则折扣的影响,因此可能高于实际最终价格或一般价格。

$gr_price_arr = $_product->getData('group_price');
foreach ($gr_price_arr as $gr_price){
    echo '<br>CustomerGroup='.$gr_price['cust_group'].' GroupPrice='.$gr_price['price'];
}

其他一些有用的功能,可以获取目录规则和购物车规则的特殊价格和复制品

//get Catalogue Rule by ID
$rule = Mage::getModel('catalogrule/rule')->load($rule_id); 
//get Rule Name and Discount Amount
echo '<br>name: '.$rule->getName().' Amount: '.$rule->getDiscountAmount().'<br>';


//get Cart Rules and Coupon Discounts
$coupon = Mage::getModel('salesrule/rule');
$couponCollection = $coupon->getCollection();
foreach($couponCollection as $c){
    echo 'Code:'.$c->getCode().'--->Discount Amount:'.$c->getDiscountAmount().'<br />'; }

有时检查客户是否已登录

可能很有用
Mage::getSingleton('customer/session')->isLoggedIn()

我希望这会对某人有所帮助。

答案 3 :(得分:2)

另一种解决方案。如果组价格小于主要价格,则函数getGroupPrice返回主要价格。

//get product
$product = Mage::getModel('catalog/product')->load($id);

//get group by code
$group = Mage::getModel('customer/group')->load($code, 'customer_group_code');

//get group price
$product->setCustomerGroupId($group->getId());
$price = $product->getGroupPrice();

//get main price
$product->setCustomerGroupId(null);
$price = $product->getPrice();

答案 4 :(得分:1)

你是怎么做的。经过测试和工作。

<?php
$now = Mage::getSingleton('core/date')->timestamp( time() );
$websiteId = 1; // Choose your store # here
$customerGroup = 4;
$productId = 9369;
$rules = Mage::getResourceModel('catalogrule/rule');
echo $rules->getRulePrice($now, $websiteId, $customerGroup, $productId));
?>

答案 5 :(得分:0)

如果某人仍然在1.7.0.2 CE版本上搜索解决方案,这样的代码对我有效(在我使用产品对象的情况下):

$group_id = 4;
$grp_price = $_product->getData('group_price');
echo $grp_price[$group_id]['price'];