如何在Magento中基于客户组显示所选产品

时间:2015-02-18 03:47:10

标签: magento product

我想在Magento创建一组客户,例如。第1组,第2组。现在假设我们在目录中有10个产品,我想只为特定的客户群分配某些产品。现在,当客户说从第1组登录时,他应该只能看到那些被归属于第1组而不是所有产品的产品。

1 个答案:

答案 0 :(得分:2)

您可以使用与可用客户组对应的选项创建类型为multiselect的产品属性。然后,为每个产品选择可用的组。之后,您可以覆盖Mage_Catalog_Model_Category::getProductCollection并检查客户是否已登录,如果是,请检查其客户组。之后,您可以过滤此客户组的产品集合。你的代码应该是这样的:

class Namespace_Module_Model_Rewrite_Catalog_Category extends Mage_Catalog_Model_Category {
    public function getProductCollection()
    {   
        if(Mage::getSingleton('customer/session')->isLoggedIn()){
            // Get group id
            $group_id = Mage::getSingleton('customer/session')->getCustomerGroupId();
            // Get customer group code
            $group = Mage::getModel('customer/group')->load($group_id);
            $group_code = $group->getCode();

            // Get multiselect attribute options
            $attributeOptionArray = array();
            $attrribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 'customer_group_attribute_code');
            foreach ($attrribute->getSource()->getAllOptions(true, true) as $option) {
                $attributeOptionArray[$option['value']] = $option['label'];
            }

            $collection = Mage::getResourceModel('catalog/product_collection')
                    ->setStoreId($this->getStoreId())
                    ->addAttributeToFilter('customer_group_attribute_code', array('finset' => array_search($group_code, $attributeOptionArray)));
        } else {
            $collection = Mage::getResourceModel('catalog/product_collection')
                ->setStoreId($this->getStoreId())
                ->addCategoryFilter($this);
        }

        return $collection;
    }
}