Magento - 过滤具有特定客户群价格的产品(按组代码,而不是ID)

时间:2013-01-11 21:20:58

标签: magento

我希望按照在产品级别设置group_price并分配给特定客户群的产品过滤产品列表。

我认为这将是:

$products->addFieldToFilter('group_price', array(
        array(
            'cust_group' => 2
        )
    ));

但似乎group_price不是属性。此外,$_product->getGroupPrice()始终返回产品的价格,即使产品上设置了组价格。

理想情况下,我更愿意通过客户群代码(即批发,零售等)而不是群组ID来过滤这些(仅适用于有人可能会删除客户群并稍后重新创建的情况和ID变化)。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我有类似的要求,但问题是迭代大型产品系列太慢了。

catalog_product_index_price表包含组信息,因此您可以尝试以下内容:

$productCollection = Mage::getModel('catalog/product')->getCollection();
...
$productCollection->addFinalPrice();
$productCollection->getSelect()->where(
    'price_index.customer_group_id = ? AND price_index.group_price IS NOT NULL',
    $customer_group_id
);

答案 1 :(得分:0)

我最终使用了这个:

    $products = Mage::getModel('catalog/product')->getResourceCollection();
    $products
        ->addAttributeToSelect('*')
        ->addAttributeToFilter('visibility', array('neq' => 1));

    foreach ($products as $product => $value) {

        //still not sure how to get 'group_price' without running load() =(
        $productModel = Mage::getModel('catalog/product')->load($value->getId());
        $groupPrices = $productModel->getData('group_price');

        // A helper of mine
        // store the customer's groupId to compare against available group prices array below.
        $currentGroupId = Mage::helper('user')->getCustomerGroup()->getId();

        // remove products w/o configured group prices
        if (!count($groupPrices)) {
            $products->removeItemByKey($product);
        }
        foreach ($groupPrices as $key) {
            foreach ($key as $subkey => $value) {
                if ($subkey == "cust_group") {
                    $customerGroup = $subkey;
                    if ($value != $currentGroupId) {
                        $products->removeItemByKey($product);
                    }
                }
            }
        }
    };


    $this->_productCollection = $products;
    return $this->_productCollection;