2

我正在寻找那些group_price在产品级别设置并分配给特定客户组的产品来过滤产品列表。

我在想它会是这样的:

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

但它似乎group_price不是一个属性。此外,$_product->getGroupPrice()无论是否在产品上设置了团体价格,始终返回产品的价格。

理想情况下,我更喜欢按客户组代码(即批发、零售等)而不是组 ID 过滤这些(仅适用于有人可能删除客户组并稍后重新创建它并且 ID 更改的情况)。

有什么想法吗?

4

2 回答 2

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
);
于 2015-11-29T14:10:34.163 回答
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;
于 2013-01-12T05:34:06.250 回答