Измените подкатегории 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();
  }
}
Другие вопросы по тегам