Вы здесь

Настрока url для facetapi и prettypath

0

Есть меню каталога, построенное на основе словаря catalog. При выборе категории появляется блок фасетов с отборами. При этом текущий URL=domain/category/blabla/113, а url у фасетов - domain/category/blabla/113?f[0]=field_firstfield:103 , domain/category/blabla/113?f[0]=field_secondfield:126.
Пока что все хорошо.
Включаю prettypath. и вместо domain/category/blabla/113?f[0]=field_firstfield:103 url формируется domain/taxonomy/term/113/field_firstfield/data-103 .
Почему то prettypath берет сырой путь термина (taxonomy/term/113), вместо того, чтобы подставить альяс (category/blabla/113).
1) Как сделать url для фасетов с альясом
2) Как сделать такой путь: domain/category/blabla/113/options=102-108-220 , где 102, 108, 220 - это ИД терминов таксономии.
Спасибо.

Версия Drupal: 
7.x
Связанные проекты: 
Facet APIFacet API Pretty Paths
Вопрос задан 30.10.2015 - 14:33

Ответы

0

Настройки в модуле есть по alias или token? Если по верхам = нет, смотреть в код модуля?!

Ответ дан 30.10.2015 - 15:15

Настройки в модуле pretty parth есть по альясу. Но альяс подставляеся вместо сырого названия поля (к примеру, был field_color domain/taxonomy/term/113/field_color/data-103 с альясом будет color будет domain/taxonomy/term/113/color/data-103)

Комментарий оставлен 30.10.2015 - 15:41
0
  • Идём сюда: ./admin/config/search/search_api/index/YOUR_search_index/facets;
  • Выбираем нужный фасет (Configure display);
  • Внизу, в районе Add facet for missing values, находим поле с описанием «Pretty paths will be generated as "search/url/segment1/segment2/". By default, a segment will look like: ...»;
  • Вводим туда нужный алиас отображения;
  • Профит.
Ответ дан 30.10.2015 - 18:18
0

Добрый день,была такая же проблема, решение здесь https://www.drupal.org/node/2287573#comment-9386159
у меня получилось следующее:
в файле url_processor_pretty_paths.inc добавляем

 if ($pathAlias = drupal_lookup_path('alias', $this->pathWithoutSegments)) {
      $this->pathWithoutSegments = $pathAlias;
   }

после строки

    $this->pathWithoutSegments = implode('/', $args);

Тем самым мы изменили путь у фасетов, теперь они с алиасами

Этого недостаточно, т.к. при переходе на данную ссылку вы получите 404.

Далее нам надо подменить адрес, чтобы небыло 404. Для этого создаем простой модуль

function MYMODULE_url_inbound_alter(&$path, $original_path, $path_language) {
  if (strstr($path, 'katalog')) {
    $exploded = explode('/', $path);
    if(isset($exploded[2])){
      $alias_str = 'katalog/'.$exploded[1];
      $alias = path_load(array('alias' => $alias_str));
      $path = str_replace($alias_str, $alias['source'], $path);
   }
  }
}

и все работает

Ответ дан 21.12.2016 - 14:19