Фильтрация товаров при помощи фасетов

10 апреля 2013 в 16:26

Здравствуйте! Подскажите возможно ли добиться при помощи фасетов на Ubercarte подобного блока фильтрации http://demo.commerceguys.com/ck/products.

Установил модули Search API, Facet API, Database search.
Создал в Search API сервер, затем создал там же индекс в котором указал ранее созданный сервер. В индексе на вкладке фасеты отметил нужные поля, в результате чего у меня сформировались блоки, но как их вывести ума не приложу?? Подскажите как можно решить эту проблему или где почитать?

Комментарии

"Lotar" wrote:
http://www.youtube.com/watch?v=rArRwp_1h8Q вот это поможет

Спасибо помогло! Теперь я могу выводить представления, в которых будут блоки с фильтрацией. Теперь возникает вопрос как сделать чтобы эти представления выводили определенные термины таксономии.

Например ссылка site.ru/taxonomy/term/99 должен выводиться Views с терминами 99 словаря. В обычном представлении я это делал устанавливая контекстный фильтр по таксономии. Тут же я не могу найти такого фильтра. Подскажите как быть?

12 апреля 2013 в 11:25

поле с рефренсом на термины словаря-каталога надо добавить в индекс
представление создаете на базе таблицы с индексом
в представлении добавляете контекстный фильтр по полю с ссылкой на термин
в настройках контекстного фильтра указываете Предоставить аргумент по умолчанию - ID термина таксономии из URL
или передаете этот ID в представление самостоятельно

12 апреля 2013 в 12:43

поле со ссылкой добавил
представление создал на базе созданного индекса в Search API
добавил нужные поля для отображения
добавил контекстный фильтр по полю Indexed Материал: Catalog,являющегося ссылкой на термин таксономии
в настройках указал Предоставить аргумент по умолчанию - ID термина таксономии из URL.

в итоге выводится пустое представление. Вроде бы все верно сделал. Без контекстного фильтра выводятся все товары. При выводе без фильтра все товары выводятся нормально. Столбец "Каталог" это ссылка на термин таксономии товара, а столбец "ID термина (indexed)" это ид термина таксономии товара. Фильтры пробовал ставить как по ссылке так и по обычному термину, ничего не выходит подскажите пожалуйста в чем может быть ошибка?

10 ноября 2015 в 11:49

Представление прикрепил. может ошибка в простом?

----------------------
Пересоздал индекс заново и контекстный фильтр заработал!!! Теперь проблема в том как добавить кнопку "купить"? В обычном представлении она добавляется полем "Товар: Buy it now button", но здесь его нет и в индексе не нашел похожих полей. В чем тут подвох и как это можно реализовать?

10 ноября 2015 в 11:49

форма добавления в корзину физически не может быть в таблицах индекса - ей там просто нечего делать
за уберкарт не уверен на 100%, но стоит попробовать добавить в настройках представления отношение,
скорее всего, поскольку в убере товар - это нода, то по id индексированного содержимого

16 апреля 2013 в 13:12

"multpix" wrote:
выводить не поля а материал

При выводе готовой сущности, выводятся все поля, а мне нужно только некоторые(картинка, артикул, цена, "в корзину").

По поводу привязаться к id. Кнопка "в корзину" имеет вид

<input class="list-add-to-cart form-submit" type="submit" id="edit-submit-ИД_ТОВАРА" name="op" value="В корзину">

Решил сделать вывод этого поля, а в настройках ПЕРЕЗАПИСАТЬ РЕЗУЛЬТАТЫ-Заменить выводимое полем значение вставил этот код где в ИД_ТОВАРА подставил шаблон [nid]. Но в результате ничего не выводится, хотя снизу подписано, что можно использовать HTML.

Если использовать просто текст и значения из шаблонов, то все выводится, но HTML код не видится.

17 апреля 2013 в 9:35

"IIISpikerIII" wrote:
При выводе готовой сущности, выводятся все поля, а мне нужно только некоторые(картинка, артикул, цена, "в корзину").

добавить свой тип отображения (если дефолтных не хватает)
и настроить его вывод...
помешать это сделать может только тупость.

сделай, замерь, сравни со скоростью вывода полями, выбери оптимальный.

17 апреля 2013 в 10:36

"IIISpikerIII" wrote:
При выводе готовой сущности, выводятся все поля, а мне нужно только некоторые(картинка, артикул, цена, "в корзину").

а сделать новый display религия не позволяет?? поставте себе Kickstarter демо и посмотрите как там сделано, не занимайтесь фигней.

17 апреля 2013 в 10:38

"neltharian" wrote:
а сделать новый display религия не позволяет??

Почему не позволяет то?) У меня не так много опыта как у большинства присутствующих здесь и некоторые вещи я просто не знаю как реализовать. Поэтому и спрашиваю возможно очевидные для вас вещи.

Если вас не затруднит, дайте пару советов по тому как это можно с display сделать?

17 апреля 2013 в 11:35

"IIISpikerIII" wrote:
Решил сделать вывод этого поля, а в настройках ПЕРЕЗАПИСАТЬ РЕЗУЛЬТАТЫ-Заменить выводимое полем значение вставил этот код где в ИД_ТОВАРА подставил шаблон [nid]. Но в результате ничего не выводится, хотя снизу подписано, что можно использовать HTML.

не, так в друпале формы не строятся )
почитайте на досуге про Form API

раз джойнить через отношения таблицу нод не получается, тогда - выводить отрендеренный материал, как посоветовал multpix

тут у меня самого возник вопрос не холивара ради, а в целях саморазвития:
- всегда считал, что производительней делать представление полями, а не готовыми сущностями, т.к. во втором случае дёргается entity_load() со всеми его хуками
или нет?

кстати, появился повод попробовать заменить форму добавления в корзину на собственный колбек
вначале немного теории:
- для того, чтобы положить товар в корзину покупателя, необходимо отправить форму, в которой помимо id товара должен содержаться id юзера, в чью корзину добавляется товар, а точнее - id сессии юзера, т.к. все анонимы имеют id=0
- в связи с этим, формы добавления товара, а вместе с ними и страница каталога, содержащая эти формы, генерятся для каждого посетителя индивидуально, т.е. кол-во вариантов одной страницы каталога = кол-ву уников
- из-за этого кешировать представление, формирующее страницу каталога, не представляется возможными - при добавлении товара в корзину с закешированной таким образом страницы, он попадет в корзину не того посетителя, который его добавил в корзину, а того посетителя, с id сессии которого был создан кеш
- на самом деле, товар не попадет ни в какую корзину, т.к. Form API это вам non penis canina est, но это уже детали

есть мысль вместо кнопки добавления в корзину выводить какую-нибудь ссылку, разукрашенную под кнопку:
<a class="my-custom-add-to-cart-button" href="/my/custom/add/to/cart/callback/prodict/id/equal/[nid]">Добавить в корзину</a>
- на ссылку навесить аякс, чтобы страница не перегружалась
- в коллбеке генерить форму добавления в корзину и сразу же её сабмитить
- или просто дёргать функцию добавления в корзину <---- ACHTUNG! тут может случиться дырка

в качестве ожидаемого профита - можно кешировать страницу каталога, кешформ будет пухнуть намного медленнее

17 апреля 2013 в 12:04

"IIISpikerIII" wrote:
Если вас не затруднит, дайте пару советов по тому как это можно с display сделать?

я просто умоляю ... поставьте commerce kickstarter и посмотрите там сами.... сразу куча вопросов отпадет

17 апреля 2013 в 12:35

"neltharian" wrote:

все верно, но он лентяй)))
"IIISpikerIII" wrote:

для утяжеления админ-интерфейса есть такое:
http://drupal.org/project/entity_view_mode
но проще делать своим модулем (коли надо)
"Andruxa" wrote:

сейчас у меня долгострой (пепел на наши головы))
так там делал так:
каталог - вьюс - индекс solr - вывод индексированных полей
nid перезаписан на вывод соответствующей ноды во всплывающем окне,
а-ля быстрый просмотр, и там уже и купить и голосовать и отложить и заказать (мильйон форм).

17 апреля 2013 в 12:55

"multpix" wrote:
nid перезаписан на вывод соответствующей ноды во всплывающем окне

да, но это же лишний клик, а заказчики люто неистово фапают на правило трёх кликов

17 апреля 2013 в 13:02

"Andruxa" wrote:
да, но это же лишний клик, а заказчики люто неистово фапают на правило трёх кликов

и никак не хотят вникнуть в структуру своих-же товаров а так-же особенности и подводные камни функционала своего-же магазина.
а доступно и расширенно это объяснять - как книгу написать))

меня спасло то что это было условием клиента

p.s.
выводить формы рядом с полями из индекса, так-жеж весь позитив от индексации потеряем)) имхо.

17 апреля 2013 в 13:19

"neltharian" wrote:

дак уже помог))
показал куда смотреть,
а Андрюха подводные камни обозначил.
этого достаточно.

думаю будет полезно, а дать готовое решение - это как обезьяне гранату подарить)))
кстати универсального готового решения этой траблы нет.
или я туплю ...

17 апреля 2013 в 13:47

"multpix" wrote:
выводить формы рядом с полями из индекса, так-жеж весь позитив от индексации потеряем)) имхо.

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

"multpix" wrote:
универсального готового решения этой траблы нет

да это и не трабла в общем-то: запросы к солру идут по http, и джойнить в них sql - это как совмещать понятия пространства и времени

топикстартеру еще на водка:
- в представлениях существуют темплейты полей, можно в темплейте рендерить форму добавления в корзину, дёргая её с помощью drupal_get_form()

17 апреля 2013 в 14:01

"multpix" wrote:
все верно, но он лентяй)))

да лентяй лентяй))

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

Что получилось прикрепил. Но теперь столкнулся со следующим. Поскольку поля одинаковые, то и классы у них одинаковые т.е. оформление полей будет одинаковое, что на странице товара то и в анонсе. И еще нужно убрать в анонсе надпись "Цена онлайн". Пока вижу решение в скрипте, скрывающем надпись и изменяющем стили. Думаю что возможно есть какое-то более рациональное решение.

10 ноября 2015 в 11:49

"IIISpikerIII" wrote:
о и классы у них одинаковые т.е. оформление полей будет одинаковое, что на странице товара то и в анонсе.

сделайте для вюхи другой цсс. делов то

напись цена онлайн прячите тоже через цсс

17 апреля 2013 в 16:27

"neltharian" wrote:
сделайте для вюхи другой цсс. делов то
напись цена онлайн прячите тоже через цсс

Ой, точно не подумал, спасибо!

17 апреля 2013 в 16:36