Цель: преобразовать вид ссылок, образующихся при поиске товаров, в соответствии с шаблоном.
Исходные данные:
Допустим, мы продаем на нашем сайте ковры…
- ищем товар в поиске с помощью строки поиска “stroka poiska”;
- результатом поиска будет URL вида
Задача:
преобразовать вид URLов, получающихся при поиске товара, по следующему шаблону:
Исходный URL: www.example.com/catalogsearch/result/?q=<слово_1>+<слово_2>+<слово_3>+<слово_4>
Итоговый URL: www. example.com/buy-rugs/<слово_1>+<слово_2>+<слово_3>+<слово_4>.html
Примечания:
- в строке поиска будет от одного до четырёх слов.
И так…
Нам надо для начала перебить стандартный контроллер на наш, чтобы тот редиректил на красивый урл, а затем переписать правилами красивый урл на реальный урл… Звучит всё страшно, но делается просто:
<?xml version="1.0"?>
<config>
<global>
<rewrite>
<onotole_shukaet>
<from><![CDATA[#^/buy-rugs/(.*)#]]></from>
<to>/rug/index/search/q/{$1}</to>
</onotole_shukaet>
<onotole_redirecte>
<from><![CDATA[#^/catalogsearch/result/(.*)#]]></from>
<to>/rug/index/dosearch/words/{$1}</to>
</onotole_redirecte>
</rewrite>
</global>
</config>
Теперь нам надо создать свой контроллер (не забудьте добавить роутер), у меня он называется rug
public function searchAction()
{
$query = Mage::helper('catalogSearch')->getQuery();
$query->setStoreId(Mage::app()->getStore()->getId());
if ($query->getQueryText()) {
if (Mage::helper('catalogSearch')->isMinQueryLength()) {
$query->setId(0)
->setIsActive(1)
->setIsProcessed(1);
}
else {
if ($query->getId()) {
$query->setPopularity($query->getPopularity()+1);
}
else {
$query->setPopularity(1);
}
if ($query->getRedirect()){
$query->save();
$this->getResponse()->setRedirect($query->getRedirect());
return;
}
else {
$query->prepare();
}
}
Mage::helper('catalogSearch')->checkNotes();
$this->loadLayout(
array(
'default',
'catalogsearch_result_index'
)
);
$this->_initLayoutMessages('catalog/session');
$this->_initLayoutMessages('checkout/session');
$this->renderLayout();
if (!Mage::helper('catalogSearch')->isMinQueryLength()) {
$query->save();
}
}
else {
$this->_redirectReferer();
}
}
public function dosearchAction()
{
$q = Mage::app()->getRequest()->getParam('q');
$this->_redirect('buy-rugs/'.$q);
}
Вот собственно и всё.
Теперь поисковые запросы перехватываются, редиректятся на страничку с красивым урлом, этот красивый урл переписывается в понятный для magentо формат, осуществляется поиск и отображаются результаты.
Похожие Magento-статьи:













не могли бы пояснить в какие именно файлы вносить изменения…