переопределение поиска в magento
У меня есть веб-сайт Magento, настроенный на 1 веб-сайт и 2 магазина. Товары каждого магазина разделены корневой категорией, что означает, что у каждого магазина есть своя корневая категория.
Я хочу, чтобы товары из магазина A не были доступны для поиска в магазине B. Как переопределить поиск, чтобы сделать это? какой метод мне следует изучить?
Примечание: Я не хочу использовать настройку видимости по некоторым причинам, таким как это сделает товар из другого магазина недоступным в корзине/мини корзина.
3 answers
Отмените назначение товаров магазина A, которые вы не хотите показывать в магазине B, и они не будут доступны для поиска. (Вкладка Веб-сайты в режиме редактирования продукта)
Чтобы переопределить поиск, вы должны переписать ResultController из модуля catalogsearch в ядре magento. Было бы неплохо также переопределить помощника.
Я поставил addAttributeToFilter, переписав Mage_CatalogSearch_Model_Layer::getProductCollection()
app/code/local/Vela/CatalogSearch/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<Vela_CatalogSearch>
<version>0.0.1</version>
</Vela_CatalogSearch>
</modules>
<global>
<models>
<catalogsearch>
<rewrite>
<layer>Vela_CatalogSearch_Model_Layer</layer>
</rewrite>
</catalogsearch>
</models>
</global>
</config>
Затем в моем app/code/local/Vela/CatalogSearch/Model/Layer.php
файле
<?php
class Vela_CatalogSearch_Model_Layer extends Mage_CatalogSearch_Model_Layer
{
public function getProductCollection()
{
if (isset($this->_productCollections[$this->getCurrentCategory()->getId()])) {
$collection = $this->_productCollections[$this->getCurrentCategory()->getId()];
} else {
$collection = Mage::getResourceModel('catalogsearch/fulltext_collection');
$this->prepareProductCollection($collection);
$this->_productCollections[$this->getCurrentCategory()->getId()] = $collection;
}
// start modification
$store_id = Mage::app()->getStore()->getId();
$store_code = Mage::app()->getStore()->getCode();
$_product = Mage::getModel('catalog/product');
$_attr = $_product->getResource()->getAttribute('universo_store');
if ($_attr->usesSource()) {
$_attr_option_id_seafolly = $_attr->getSource()->getOptionId("seafolly");
$_attr_option_id_havaianas = $_attr->getSource()->getOptionId("seafolly");
}
if(stripos('seafolly',$store_code) !== FALSE){ // seafolly
$store_id = $_attr_option_id_seafolly;
} else {//havaianas
$store_id = $_attr_option_id_havaianas;
}
$collection->addAttributeToFilter('universo_store', array('eq'=>$store_id));
// end modification
return $collection;
}
}