Search API, Facets block

Главные вкладки

Аватар пользователя samodelkin samodelkin 7 января 2014 в 12:48

Добрый день. Есть вопросик по Search API

Ситуация такая. Настроил Search API и Facets Вывожу страницу продуктов Views по индексам. На странице вывода все хорошо все фильтруется. Так-же у меня есть блок который выводит категории продукции ввиде древовидного меню. Ссылки с дерева идут на страницу таксономии вывод которой переопределен тем-же представлением представлением что и для вывода продукции. Настроен контекстный фильтр. При переходе на страницу категории продукты по индексам выводятся и фасеты то-же и при этом через контекстный фильтр фильтруются по категории. Но тут появляется проблема. Ссылки с фасетов не корректные. Не подхватывается синоним пути, используется системный но и тот не рабочий.
пример:
http://site.ru/taxonomy/term/%25?f[0]=field_naprjazhenie%3A220

И этот путь одинаков какая бы категория не выбиралась бы.

Подскажите есть-ли возможность исправить такое поведение?

Есть другой вариант вывести Views блок фасета категории, при этом все хорошо фильтры подхватываются, но категории выводится просто списком а мне нужен древовидный вывод. Подскажите как переопределить вывод в Views Facets block в древовидный? Это был бы более правильный вариант. Но если можно будет починить первый то то-же неплохо.

Комментарии

Аватар пользователя Artu Artu 7 января 2014 в 15:20

"samodelkin" wrote:
у меня есть блок который выводит категории продукции ввиде древовидного меню. Ссылки с дерева идут на страницу таксономии вывод которой переопределен тем-же представлением представлением что и для вывода продукции.Настроен контекстный фильтр. При переходе на страницу категории продукты по индексам выводятся и фасеты то-же и при этом через контекстный фильтр фильтруются по категории.

Taxonomy menu ведет на представление, которое построено по индексу Search API?
Как это удалось?
Или все же ведет на другой дисплей (view)?

По второму варианту есть предложения тут - http://www.drupal.ru/node/105698.

Аватар пользователя samodelkin samodelkin 7 января 2014 в 22:46

"Artu" wrote:
Taxonomy menu ведет на представление, которое построено по индексу Search API?

Блок построен Views по обычной таксономии через стиль древовидного меню Views Dynatree
Страница термина таксономии переопределена с помощью модуля Taxonomy display
На переопределенной странице термина таксономии выводится views который как раз выводит ноды через индекс search api. так же в этом представлении настроен контекстный фильтр по id термина что-бы ноды фильтровались по термину.
Но как уже писал при этом не работают фасетные фильтры, они выводятся но URL на который они ссылаются не корректный.

"Artu" wrote:
По второму варианту есть предложения тут - http://www.drupal.ru/node/105698.[/quote]
Что-то ничего там не понял Sad

https://drupal.org/node/2017007
Вот тут вроде описан способ вывода фасетного фильтра на другой странице, но с английским у меня туго Sad Понял что делается блок через Facets Block и при этом делается скрытым. А так-же делается обычный блок Views который должен выводится вместе с Facets Block. А вот по чему делать этот обычный Block непонятно.

Аватар пользователя Artu Artu 8 января 2014 в 1:08

"samodelkin" wrote:
Что-то ничего там не понял :(

Я думал вам подойдет https://drupal.org/project/views_tree или другой способ вывода дерева категорий.
Но раз это уже сделано, то странно что у них неверный URL.
А ссылка с категории идентична ссылке как если бы оно выводилась через Facet API блок для категорий?
Facet API Pretty Paths пробовали?

Аватар пользователя samodelkin samodelkin 10 ноября 2015 в 11:49

"Artu" wrote:
Facet API Pretty Paths пробовали?

Пробовал, он вроде просто красивые адреса делает.

Высмотрел еще такой момент. Фасетные фильтры не могут работать с контекстными фильтрами, они не подставляют аргумент. и не воспринимают пути Views с аргументами, адрес получается такой "taxonomy/term/%" По этому и не работают.

Пока Хочу попробовать написать свой фильтр и попробовать подставить аргумент.

upd.
С фильтром не прошло, подход не удался. Сделал модуль за основу взяв часть модуля search_api_views, а именно файл display_facet_block.inc который отвечает за вывода блока фильтров на любой странице. Но он может выводить только список. В модуле получаю все термины словаря и фильтрую их значениями из фильтра, затем вывожу в виде дерева. За реализацию сильно не пинайте Smile нужно было быстрое решение, а на просторах гугла и форума его найти не удалось. Если кто знает подскажите. Для интересующихся приложен файл с модулем. Полноценным решением его считать не стоит.

Аватар пользователя samodelkin samodelkin 23 января 2014 в 17:30

Еще дополнение. Ели добавить display facet block, на нужную страницу, то на этой странице будут выводится фасетные фильтры, но главное условие display facet block должен быть выше фасетных фильтров в нужном регионе шаблона. Наткнулся на это совершенно случайно переместив блок выше. Как я понимаю данный способ был описан на данной странице https://drupal.org/node/2017007, но до конца я понять его не смог, теперь ясно.

Аватар пользователя Artu Artu 23 января 2014 в 20:45

samodelkin, во как. Спасибо. А думал зачем этот view display.
А как это на практике?
У view display должны быть раскрытые фильтры? И что должна вьюха выводить, ведь kheubt фильтры ведут на свою вьюху ?

Аватар пользователя samodelkin samodelkin 23 января 2014 в 22:13

Раскрытые фильтры не нужны. Views создаем для вывода того индекса что создали в Search API. В моем случае это products и задаем адрес "продукция". После перехода по ссылке "продукция" будут выводится все материалы по индексу products в Search API. Так-же будут выводится фасетные фильтры (блоки) если они были настроены в Search API и добавлены в соответствующий регион. Все у нас готова страница продукции где эту самую продукцию можно фильтровать по доп параметрам. Для того что-бы вывести те-же фасетные блоки (фильтры) на отличной от "продукция" страницы, нам нужно в нашей созданной вьюхе по выводу продукции добавить новый display "Facets block" в настройках добавляем адрес куда должен переходить пользователь по клику из блока и показывать или нет блок. Данный блок размещаем в том регионе и для тех страниц где мы хотим увидеть фасетные фильтры (блоки). Основная фишка этот блок должен быть расположен выше чем фасетные.

Аватар пользователя PVasili PVasili 21 марта 2018 в 14:32
1

Вдруг кому пригодится: была задача: вывести фасетные блоки на страницах каталога, включая всех детей/родителей.

Как сделать и выводить каталог с иерархией уже обсуждали много раз.

Для фасетов используем 2й вариант из #2017007, прописав видимость блокам с фасетными полями URL-ы каталога, а сам блок от этого дисплея views подняв выше них.
Блоку прописываем контекстный фильтр со значением по умолчанию ID из URLа для поля структуры каталога.
Но тогда у нас фильтры не будут видны у родительских веток. Тут немного кода/ Выбираем PHP фильтр и добавим

<?php$arument = arg(2);
$terms = taxonomy_get_children($arument);
$output = '';
if (!empty($terms)) {
  foreach ($terms as $tid => $term) {
    $output .= $tid . '+';
  }
  $output = substr($output,0,-1);

else {
  $output = $arument;
}
return($output);?>