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

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

Аватар пользователя IIISpikerIII IIISpikerIII 10 апреля 2013 в 16:26

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

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

Комментарии

Аватар пользователя IIISpikerIII IIISpikerIII 12 апреля 2013 в 11:25

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

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

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

Аватар пользователя Andruxa Andruxa 12 апреля 2013 в 12:43

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

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

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

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

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

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

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

Аватар пользователя Andruxa Andruxa 16 апреля 2013 в 13:12

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

Аватар пользователя IIISpikerIII IIISpikerIII 17 апреля 2013 в 9:35

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

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

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

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

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

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

Аватар пользователя multpix multpix 17 апреля 2013 в 10:36

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

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

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

Аватар пользователя neltharian neltharian 17 апреля 2013 в 10:38

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

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

Аватар пользователя IIISpikerIII IIISpikerIII 17 апреля 2013 в 11:35

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

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

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

Аватар пользователя Andruxa Andruxa 17 апреля 2013 в 12:04

"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! тут может случиться дырка

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

Аватар пользователя neltharian neltharian 17 апреля 2013 в 12:35

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

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

Аватар пользователя multpix multpix 17 апреля 2013 в 12:55

"neltharian" wrote:

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

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

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

Аватар пользователя Andruxa Andruxa 17 апреля 2013 в 13:02

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

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

Аватар пользователя multpix multpix 17 апреля 2013 в 13:19

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

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

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

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

Аватар пользователя multpix multpix 17 апреля 2013 в 13:47

"neltharian" wrote:

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

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

Аватар пользователя Andruxa Andruxa 17 апреля 2013 в 14:01

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

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

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

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

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

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

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

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

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

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

Аватар пользователя neltharian neltharian 17 апреля 2013 в 16:27

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

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

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

Аватар пользователя IIISpikerIII IIISpikerIII 17 апреля 2013 в 16:36

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

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