Автор Тема: Избавиться от хешей в урле  (Прочитано 81 раз)

09 Апрель 2018, 12:47:07
  • Старожил
  • ****
  • Сообщений: 384
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
День добрый!

Фильтр blocklayered формирует ссылки такого плана:
www.test.ru/5-hand-bag#/torgovye_marki-eleganzza/cvet-lilovyjПараметры torgovye_marki и cvet в урле отображаются как хеши.
Подскажите можно ли сделать так, чтобы урл формировался без хешей, например вот так:
www.test.ru/5-hand-bag/torgovye_marki-eleganzza/cvet-lilovyjТаковы требования сеошников:
"Страницы, созданные по свойствам фильтра не должны содержать спец символы типа «#», чтобы не препятствовать корректной индексации страниц поисковыми системами"

Заранее большое спасибо!
09 Апрель 2018, 14:34:51
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 14777
  • Репутация: +14588/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Старая тема, уже обсуждали много раз на этом форуме и на prestashop.com.
https://prestashop-forum.ru/index.php/topic,6427.0.html
09 Апрель 2018, 14:56:25
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 3286
  • Репутация: +77/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Удали знак '#' в blocklayered.php и blocklayered.js
09 Апрель 2018, 15:16:05
Ответ #3
  • Фрилансер
  • *
  • Сообщений: 160
  • Репутация: +0/-0
    • Просмотр профиля
https://prestashop-forum.ru/index.php/topic,3357.msg18393.html#msg18393
тут пишут, что получилось убрать знак # в урле при выборе фильтра
09 Апрель 2018, 15:58:31
Ответ #4
  • Старожил
  • ****
  • Сообщений: 384
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Можно ли сделать редирект (перенаправление) с этого адреса
https://sitename.local/3-bags/kategorii-sumka_na_ruku/torgovye_marki-eleganzza/cvet-golubojна этот
https://sitename.local/3-bags#/kategorii-sumka_na_ruku/torgovye_marki-eleganzza/cvet-golubojс помощью nginx rewrite.
Примечание #- отсутствует

Ну или что-то придумать через такие урлы (т.к. хеши завязаны на js):
https://sitename.local/3-bags?selected_filters=torgovye_marki-eleganzza/cvet-goluboj
Ну и конечно же чтобы всё работало :)
17 Апрель 2018, 09:37:01
Ответ #5
  • Старожил
  • ****
  • Сообщений: 384
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нашёл интересный способ избавиться от хешей.
Заменой '#' на 'filter'

Необходимо внутри файла blocklayered.php изменить все символы hash '#' на 'filter'
В моём случае изменил две строки P.S.1.6:
$type_filter['values'][$key]['link'] = $categorie_link.'#'.ltrim($parameters, '/');
'current_friendly_url' => ((int)$n == (int)$nb_products) ? '#/show-all': '#'.$filter_block['current_friendly_url'],

Далее в blocklayered.js  в 
function reloadContent(params_plus)
 
изменить код
window.location.href = current_friendly_url;
на

var url = window.location.href;
if(url.indexOf('filter') === -1){

} else {
   url = url.substr(0, url.indexOf('filter'));
}

window.history.replaceState(null, null, url + current_friendly_url);

Поэтому хочу уточнить, кто нибудь победил проблему данным способом?

У меня сейчас функционал работает на 50%.

Осталось следующая проблема: при клике по фильтрам всё работает, получаются ссылки следующего вида:
https://test.ru/3-bags/filter/price-9166-34200
Однако если эту ссылку скопировать и вставить в окно броузера, то получаю:
"СТРАНИЦА НЕДОСТУПНА ИЗВИНИТЕ, ЗАПРОШЕНОЙ ВАМИ СТРАНИЦЫ НЕ СУЩЕСТВУЕТ"

Куда ещё копать?
Где ещё поменять символы hash '#' на 'filter'? Судя по всему это не blocklayered.php и blocklayered.js Возможно Dispather.php
Заранее спасибо!

P.S. Ссылка на оригинал в самом конце:
https://www.prestashop.com/forums/topic/436903-modules-blocklayered-of-seo-unfriendly-url-solution-pjax-pushstate-ajax/
17 Апрель 2018, 13:25:54
Ответ #6
  • Старожил
  • ****
  • Сообщений: 384
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Подскажите.

Вот например имеем две ссылки:
1). https://test.ru/3-bags/filter/price-9495-342002). https://test.ru/3-bags/#/price-9495-34200
разница только в '#' и 'filter'

Для этих урлов  $_GET возвращает разные массивы.

Подскажите где находятся правила по которым разбираются эти урлы.
Мне необходимо, чтобы по 'filter' происходил такой же разбор как и по '#'

И всё таки такие ссылки выглядят более привлекательными:
https://test.ru/bags/women-bags/hand-bag/filter/size_bag-small/price-10574-33900
20 Апрель 2018, 08:52:10
Ответ #7
  • Старожил
  • ****
  • Сообщений: 384
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В общем этот метод оказался жизнеспособным.

Ещё нужно подправить Dispather.php и FrontController.php

Рекомендую...