Автор Тема: Знак # в урле при выборе фильтра  (Прочитано 2736 раз)

15 Ноябрь 2014, 20:05:14
  • Новичок
  • *
  • Сообщений: 4
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте!
Подскажите, пожалуйста, как правильно убрать # из урла при выборе фильтрации?

В настройках фильтра указала - Индексировать и атрибуты, и характеристики, но от этого ничего не меняется и # всё-равно появляется

у меня получилось убрать следующим способом, но это что не то по ходу:

в файле /modules/blocklayered/blocklayered.php
строка 2805:
$type_filter['values'][$key]['link'] = Context::getContext()->link->getCategoryLink($parent, null, null).'#'.ltrim($parameters, '/');
заменяем на:
$type_filter['values'][$key]['link'] = Context::getContext()->link->getCategoryLink($parent, null, null).ltrim($parameters, '/');

и строка 3093:
'current_friendly_url' => ((int)$n == (int)$nb_products) ? '#/show-all': '#'.$filter_block['current_friendly_url'],
заменяем на:
'current_friendly_url' => ((int)$n == (int)$nb_products) ? '#/show-all': '.'.$filter_block['current_friendly_url'],

Но теперь ошибка появляется при выборе какого-нибудь фильтра, что страница не найдена http://www.uniqroom.ru/matrasy/. Причём сначала фильтр срабатывает нормально, но потом страница обновляется и появляется эта ошибка

помогите, пожааалуйста! очень нужно решить эту проблему
уже очень давно с ней парюсь
15 Ноябрь 2014, 20:10:05
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
А зачем? Для поисковиков это бесполезно, для посетителей не нужно. Для чего это делать?
15 Ноябрь 2014, 20:13:18
Ответ #2
  • Новичок
  • *
  • Сообщений: 4
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
мне нужно индексировать эти страницы фильтрации, чтобы у меня было больше посадочных страниц
для некоторых фильтров, например, по производителю, я буду выводить соответствующие тексты и мета-теги
15 Ноябрь 2014, 20:30:04
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Убрать не получиться, заменить можно. Для того чтобы убрать нужно переделать схему чпу в классе Dispatcher. В url все будет считано до знака фильтров, путь страницы будет формироваться по правилам чпу. Если у вас не будет знака, после которого не учитывать значения для url, то невозможно будет определить адрес страницы.
15 Ноябрь 2014, 20:32:14
Ответ #4
  • Новичок
  • *
  • Сообщений: 4
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
а как правильно заменить?
15 Ноябрь 2014, 20:33:37
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Как вариант можно через правила редиректа попробывать менять адреса, но придеться в ручную эти правила добавлять, а если товаров много и меняются часто, то это быстро надоест.
15 Ноябрь 2014, 20:37:42
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
а как правильно заменить?
Фактически только для категорий менять можно. Фильтры актуальны при листинге товара.
Находите правила категорий
$default_routes = array(
'category_rule' => array( ...
и меняете. Еще проверить нужно будет работу с FC_MODULE, там для модулей путь собирается.
15 Ноябрь 2014, 20:43:47
Ответ #7
  • Партнер
  • Старожил
  • ****
  • Сообщений: 313
  • Репутация: +13/-0
  • SEO оптимизация сайтов, интенет-магазинов.
    • Просмотр профиля
Я поднимал такой вопрос вопрос на серче, не для престы, а для другой смс. Мне ответили, что хеш можно убрать при момощи javascript, изменив свойство window.location.hash.
Больше вариантов нет.
Поисковая оптимизация, SEO  оптимизация сайтов, интенет-магазинов.  Работа на результат –  вывод в топ, увеличение посещяемости и увеличение продаж.
15 Ноябрь 2014, 20:51:14
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 885
  • Репутация: +206/-0
    • Просмотр профиля
Если нельзя убрать, значит можно найти другое решение.
Для yandex можно использовать символ "!" после решётки. Заменяем '#' на  '#!' и все будет нормально индексироваться яндексом. Это будут разные страницы.
15 Ноябрь 2014, 21:05:11
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Как вариант можно через правила редиректа попробывать менять адреса, но придеться в ручную эти правила добавлять, а если товаров много и меняются часто, то это быстро надоест.
Часть url после решетки (document.location.hash в javascript), при запросах на сервер не передается. Cмотрите в любом дебагере, в заголовках запроса после GET/POST.
Это все работает через ajax запросы (javascript) и эта часть в url обрабатывается js на стороне клиента, так что htaccess не причем.
16 Ноябрь 2014, 12:55:16
Ответ #10
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 1146
  • Репутация: +338/-0
  • Job-Freelance - работа для специалистов PrestaShop
    • Просмотр профиля
    • Job Freelance - удаленная работа программистам, веб-мастерам и дизайнерам
Если нельзя убрать, значит можно найти другое решение.
Для yandex можно использовать символ "!" после решётки. Заменяем '#' на  '#!' и все будет нормально индексироваться яндексом. Это будут разные страницы.
Все генеальное просто. Только вредно это. Такие темы регулярно поднимают новички на сёрче. То что им там пишут, что этот способ не работает, их не оставливает.

Создавать десятки лендингов имеет смысл только тогда,  когда вы предлагаете много непохожих друг на друга товаров. У вас же получается однотипный товар с различными характеристиками. Что в корне неверно по отношению к посадочным страницам.

Для создания лендингов используется отдельный шаблон, текст отличается от карточки товара, процесс покупки максимально упрощен, нет перехода к стандартному процессу заказа, все делается на одной странице. Нужно максимально облегчить страницу, она должна быстро загружаться на различных устройствах. Последние не совместимо с модулем blocklayered.

Если вам так уж хочется реализовать вашу идею, то используйте модуль Advanced Search 4 for Prestashop. Он хоть работает быстрее.
Job Freelance - предложения от европейских работодателей для  программистов, веб-мастеров и дизайнеров - специалистам по Magento и PrestaShop.
16 Ноябрь 2014, 13:10:50
Ответ #11
  • Партнер
  • Старожил
  • ****
  • Сообщений: 313
  • Репутация: +13/-0
  • SEO оптимизация сайтов, интенет-магазинов.
    • Просмотр профиля
Делать лендинги на фильтрах это жесть. Заголовок один, текст одинаковый, содержимое страниц на 99% одно и тоже. Результат могу сказать сразу = БАН.
Поисковая оптимизация, SEO  оптимизация сайтов, интенет-магазинов.  Работа на результат –  вывод в топ, увеличение посещяемости и увеличение продаж.
16 Ноябрь 2014, 17:56:08
Ответ #12
  • Новичок
  • *
  • Сообщений: 4
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Всем спасибо за ответы! буду разбираться...

Делать лендинги на фильтрах это жесть. Заголовок один, текст одинаковый, содержимое страниц на 99% одно и тоже. Результат могу сказать сразу = БАН.
с чего вы взяли, что так будет? я сейчас как раз работаю над тем, чтобы у всех страниц были разные тексты и мета-теги
16 Ноябрь 2014, 18:17:53
Ответ #13
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Тогда точно не с модулем фильтров. Этот модуль тормознутый. Его бы вообще на сайте не использовать.
То что вы хотите сделать не возможно реализовать на таких модулях как Advanced Search и blocklayered. Вам нужно создавать свой модуль, в нем объединять функции фильтрации, подмены тегов, заголовков и т.д.