我希望按照在产品级别设置group_price
并分配给特定客户群的产品过滤产品列表。
我认为这将是:
$products->addFieldToFilter('group_price', array(
array(
'cust_group' => 2
)
));
但似乎group_price
不是属性。此外,$_product->getGroupPrice()
始终返回产品的价格,即使产品上设置了组价格。
理想情况下,我更愿意通过客户群代码(即批发,零售等)而不是群组ID来过滤这些(仅适用于有人可能会删除客户群并稍后重新创建的情况和ID变化)。
有什么想法吗?
答案 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;