我想使用购物车价格规则来显示交叉销售消息,而不是设置折扣。
例如,如果购物车中有某件商品,请在交叉销售区域显示促销信息。
详细的,我们有可以单独购买的夹克和裤子。但是当一起购买时,客户可以节省50美元。因此,如果夹克在购物车中,我想要一条消息说“买裤子并节省50美元”,反之亦然。当两者都在购物车中时,已有一条规则可以给予折扣,所以我想提请他们注意折扣。
答案 0 :(得分:1)
为controller_action_layout_generate_blocks_after创建一个观察者,该方法应如下所示:
注意:这是主要的想法,困难的部分是解析规则,可能更容易在规则描述中添加如下内容: productSku:123; productSku:345 并解析规则说明以查看其中一个购物车产品是否与规则匹配。
public function addPromotionBlock($observer)
{
$action = $observer->getEvent()->getAction();
$layout = $observer->getEvent()->getLayout();
if($action->getRequest()->getControllerName() == 'cart' && $action->getRequest()->getActionName() == 'index') {
$addPromotion = false;
$quote = Mage::getSingleton('checkout/cart')->getQuote();
$items = Mage::getSingleton('checkout/cart')->getQuote()->getAllItems();
$rules = Mage::getResourceModel('salesrule/rule_collection')
->setValidationFilter(
Mage::app()->getStore($quote->getStoreId())->getWebsiteId(),
$quote->getCustomerGroupId(),
$quote->getCouponCode())
->load();
// see Mage_SalesRule_Model_Validator
foreach ($items as $item) {
//check if the rules applies
foreach ($rules as $rule) {
var_dump($rule->toArray());
}
//let's say we found a valid rule
$addPromotion = true;
}
if ($addPromotion) {
$crosssell = $layout->getBlock('checkout.cart.crosssell');
if ($crosssell) {
//set your template here
$crosssell->setTemplate('checkout/promotion.phtml');
}
}
}
}