Как добавить пользовательский продукт в коллекцию поиска по каталогу?


В настоящее время я пытаюсь добавить некоторые пользовательские продукты в коллекцию 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;
    }

С помощью этого кода я могу добавить свой пользовательский продукт в исходную коллекцию, но это создаст проблему в результатах поиска по каталогу. Это означает, что если в результате поиска найден оригинальный товар, то в противном случае он успешно работает.

Любая помощь будет признательна

Спасибо

Author: Keyur Shah, 2014-07-08

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;
}
 2
Author: Sander Mangel, 2014-07-15 17:41:54

Возможно, я немного опоздаю, но надеюсь, что это поможет кому-то еще. У меня была похожая проблема. Результаты начали отображаться после того, как я переиндексировал.

 1
Author: Nimesh Jain, 2015-12-30 11:07:50