Magento按当前客户群的等级价格过滤产品

时间:2011-01-31 22:55:46

标签: php collections magento filter callback

如何通过查看是否已设置当前客户组的分级价格来过滤产品集合?

我想我需要查看catalog_product_entity_tier_price表,看看集合中的每个产品是否有current customer_group_id的条目(如果没有,则应排除产品/从集合中过滤掉了,但我无法弄清楚如何实现这一目标。

背景:某些产品不适用于某些客户群体,我们使用等级价格来确定(即,如果退出等级价格,包括收集和显示,如果没有,则排除并且不显示)。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

是的,这应该是可以实现的,但是尽量不考虑表格,而是作为对象和集合。

Product对象有一个方法getTierPrice,它使用Factory模式根据产品类型(Simple,Bundle等)返回层定价。该方法在计算等级价格时检查当前访客的组。

因此,等级价格不是经典Magento意义上的属性,这意味着您无法按属性过滤,而是可以使用集合上的walk函数来计算等级价格,然后过滤更新值的集合。

walk函数的示例可能是:

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->walk('Namespace_Module_Helper_Data::removeStockData',array());

然后在你的Namespace_Module_Helper_Data内,您有类似的内容:

public static function removeStockData($product = null)
{
    $product->setData('stock_item',null);
    return;
}

或者,您可以通过foreach循环运行集合:

foreach($collection->getItems() as $key => $item){
   if($item->getTierPrice($qty) == $item->getPrice()){  //insert your own criteria
        $collection->removeItemByKey($key);
   }
}