Magento фильтрует коллекцию продуктов по уровню цен для текущей группы клиентов - PullRequest
1 голос
/ 01 февраля 2011

Как отфильтровать коллекцию продуктов, посмотрев, была ли установлена ​​ценовая категория для текущей группы клиентов?

Я думаю, что мне нужно взглянуть на таблицу catalog_product_entity_tier_price, чтобы увидеть, есть ли запись для current customer_group_id для каждого продукта в коллекции (если нет, продукт должен быть исключен / отфильтрован из коллекции ), но я не могу понять, как это сделать.

Справочная информация. Некоторые продукты недоступны для определенных групп клиентов, и мы используем цену уровня для этого определения (т. Е. Если цена уровня выходит, включите в сбор и отображение, если нет, исключите и не отобразите).

Любая помощь очень ценится

1 Ответ

1 голос
/ 01 февраля 2011

Да, это должно быть достижимо, но старайтесь думать об этом не с точки зрения таблиц, а как объектов и коллекций.

Объект Product имеет метод getTierPrice, который использует шаблон Factory для возврата цены уровня в зависимости от типа продукта (Simple, Bundle и т. Д.).Этот метод проверяет группу текущего посетителя при расчете цен уровня.

Таким образом, цена уровня не является атрибутом в классическом смысле Magento, что означает, что вы не можете фильтровать по атрибуту, вместо этого вы можете использовать функцию 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);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...