我试图排除填充搜索结果的产品。
它似乎在我的localhost上正常工作,但在客户端dev服务器上没有。
我正在观察这个事件
catalog_block_product_list_collection
并且在观察者方法中,最后是这段代码:
$observer->getCollection()
->addFieldToFilter('entity_id', array('nin' => array_keys($_excludeProducts)))
->clear()
->load();
也适用于目录和搜索结果列表,但暂时不在客户端dev服务器上的搜索结果列表中。 非常感谢任何指导/帮助。
编辑:调试此方法会给我一个空集合,但仍然会从某个地方填充数据。
答案 0 :(得分:1)
我改变了方法并使用了另一个事件:catalog_product_collection_load_before
找到了使用更少代码实现该方法的更好方法。 #optimization
$excludeIds = array(2,3,4); //$excludeIds mixed
$observer->getCollection()
->addIdFilter($excludeIds, true); //exclude = true
该事件还有助于在收集加载之前调度工具栏上的正确项目数。
答案 1 :(得分:0)
尝试使用此事件过滤此集合时遇到类似问题。
在两种环境中,您是否有扁平类别和扁平产品设置相同?在我的情况下,我的代码只适用于平面表OFF,因为我正在使用加入其他EAV属性。
在您的情况下,如果您使用平板,我认为您只需要addAttributeToFilter()
代替。
就我而言,这是我观察者的样子:
function onCategoryCollectionLoad($observer) {
$collection = $observer->getEvent()->getCategoryCollection();
$customerGroupId = (int) Mage::getSingleton('customer/session')->getCustomerGroupId();
// hidden_from_groups is an EAV attribute; I couldn't figure out how to make it work with flat because it has a backend_model
$collection->addAttributeToSelect('hidden_from_groups');
$collection->addExpressionAttributeToSelect('should_be_hidden', "COALESCE(FIND_IN_SET($customerGroupId, {{attribute}}), 0)", 'hidden_from_groups');
// should_be_hidden is not a real db field (nor EAV attribute); it only exists because of the addExpressionAttributeToSelect() above.
$collection->addFieldToFilter('should_be_hidden', array('lt' => 1));
// I don't call $collection->load(); that will get called further down the line.
}