Как добавить пользовательский продукт в коллекцию поиска по каталогу?
В настоящее время я пытаюсь добавить некоторые пользовательские продукты в коллекцию CatalogSearch. Для этого я работаю над Mage_CatalogSearch_Model_Layer
. Я знаю, что это основная часть Magento, но всякий раз, когда я добьюсь успеха в этом коде, я переопределю CatalogSearch_Model
.
Прямо сейчас я работаю над этим методом
public function prepareProductCollection($collection)
{
$collection
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
->addSearchFilter(Mage::helper('catalogsearch')->getQuery()->getQueryText())
->setStore(Mage::app()->getStore())
->addMinimalPrice()
->addFinalPrice()
->addTaxPercents()
->addStoreFilter()
->addUrlRewrite();
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);
// my custom code start
$collection2 = Mage::getModel('catalog/product')->getCollection()->addFieldToFilter('entity_id', array(1,2));
$collectiondata=$collection2->getData();
foreach($collectiondata as $customdata)
{
$collection->addItem($customdata);
}
return $this;
}
С помощью этого кода я могу добавить свой пользовательский продукт в исходную коллекцию, но это создаст проблему в результатах поиска по каталогу. Это означает, что если в результате поиска найден оригинальный товар, то в противном случае он успешно работает.
Любая помощь будет признательна
Спасибо
2 answers
Это может быть потому, что это пустая коллекция. Без дальнейшего тестирования я бы не знал наверняка. Но, может быть, стоит попробовать
public function prepareProductCollection($collection)
{
$collection
->addAttributeToSelect('entity_id')
->addSearchFilter(Mage::helper('catalogsearch')->getQuery()->getQueryText())
->setStore(Mage::app()->getStore())
->addMinimalPrice()
->addFinalPrice()
->addTaxPercents()
->addStoreFilter()
->addUrlRewrite();
$extra_collection = Mage::getResourceModel('catalog/product_collection')
->addFieldToSelect('entity_id')
->addFieldToFilter('entity_id', array(1,2));
$collection_ids = array_merge($collection->getAllId(), $extra_collection);
$collection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
->addFieldToFilter('entity_id', $collection_ids);
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);
return $this;
}
Возможно, я немного опоздаю, но надеюсь, что это поможет кому-то еще. У меня была похожая проблема. Результаты начали отображаться после того, как я переиндексировал.