Измените подкатегории Magento в боковой многоуровневой навигации для указания на фактические категории
Мне было интересно, есть ли способ изменить URL-адреса боковой панели навигации, чтобы указывать на фактические категории.
Например, есть виджеты родительской категории с подкатегориями Виджеты компьютеров, Виджеты ноутбуков, Виджеты телефонов. Если вы переходите через основную навигацию к виджету телефона, URL-адрес, оптимизированный для SEO, будет www.example.com/widgets/phone-widgets, но если вы щелкнете по категории виджетов, по умолчанию у вас будет навигация по боковым панелям с категориями Компьютерные виджеты, виджеты для ноутбуков Телефонные виджеты. Если на этой странице вы нажмете на виджеты "Телефон", URL-адрес страницы будет www.example.com/widgets?cat=3.
Есть ли способ сделать ссылки на эти боковые категории, чтобы они указывали на www.example.com/widgets/phone-widgets вместо www.example.com/widgets?cat=3? Я действительно хотел бы сделать это с помощью кода Magento, а не расширения или перенаправления 301.
Заранее спасибо!
3 ответа
Я создал модуль, который решает эту ошибку.
https://github.com/jruzafa/Devopensource_LayerCatSeo
Спасибо,
Используйте этот код для загрузки данной категории (по идентификатору)
$category = Mage::getModel('catalog/category')->load($categoryId);
Используйте это, чтобы получить дружественный URL
$category->getCategoryUrl();
Вы можете переопределить метод getUrl() для Mage_Catalog_Model_Layer_Filter_Item.
Вот пример:
public function getUrl()
{
$value = $this->getValue();
$query = array(
$this->getFilter()->getRequestVar() => $value,
Mage::getBlockSingleton('page/html_pager')->getPageVarName() => null // exclude current page from urls
);
$url = Mage::getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true, '_query'=>$query));
if ($this->getFilter()->getRequestVar() != 'cat') {
return $url;
}
// Change ?cat=4 for real category url if no additional filters are present
// www.x.com/y?cat=4
// =>
// www.x.com/y/z
$pos = strpos($url, '&');
if ($pos !== false) {
return $url;
} else {
// no additional filters
return Mage::getModel('catalog/category')->load($value)->getUrl();
}
}