Как нормально работать с таксономией с кастомными сущностями, например в commerce?

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

Аватар пользователя vlucas vlucas 8 февраля 2018 в 17:43

Поделитесь опытом, как вы работаете с таксономией с сущностями (не node) в drupal 8?

Когда только поставил drupal 8, срузу поставил commerce 2.
По началу приятно удивился, как стало всё здорово, логично, понятно.

Создал продукт, добавил поля-термины и... Работает как задумано, увы но, таксономия до сих пор работает только с нодами.

Для меня это было удивлением, т.к. всюду заполонили всякие разные entity, а таксономия с ними не работает также как с node-контентом. Конечно есть views и search api, но как-то всё таки не совсем верно, когда переходишь на страницу с термином, ассоциированным с сущностью, а она - пуста.

Речь именно об обычных полях сущности "продукт" не атрибутов, которые могут влиять на цену.

Я уже думал, что если полностью отказаться от таксономии не для нод?
Появилось 2 идеи:
1. Использовать обычные списочные поля, но здесь, как мне кажется плохо именно для "редактора" сайта, ему нужно добавить новую характеристику - иди в управление полями - пугает - опасно, я обычно к таким вещам доступ скрываю.
2. Использовать свою кастомную сущность, например, атрибуты, по типу "продукты" (разумеется убрать лишнее). Сделать на основе entity-reference, но это тоже контент и тоже нужно будет думать, что по нему выводить.

Посоветуйте, как вы решаете этот вопрос и возникает ли он у вас вообще?

Комментарии

Аватар пользователя bumble bumble 8 февраля 2018 в 18:09

Там же все вьюхами, а таксономия привязывается референсом.
Соответственно, нужно во вьюху добавить связь с сущностями ссылаемыми на товар.

Аватар пользователя bumble bumble 8 февраля 2018 в 19:02

Василий Сергеевич wrote:

Наверное, немного не поняли.

Наверно, да...

Еще раз. В 8ке - все страницы вывода списков контента (список нод, список терминов, список товаров, список контента и т.п.), все это - выводится представлениями.

Ссылка вверху прямо на страницу редактирования той вьюхи, которая выводит страницу терминов.

Аватар пользователя vlucas vlucas 8 февраля 2018 в 19:12

bumble wrote:

Еще раз. В 8ке - все страницы вывода списков контента (список нод, список терминов, список товаров, список контента и т.п.), все это - выводится представлениями.

Да, но более точнее, представления переопределяют эти пути.
bumble wrote:

Соответственно, нужно во вьюху добавить связь с сущностями ссылаемыми на товар.

т.е. в эту вьюху - taxonomy_term нужно добавить связь на товар, это в отношениях или в аргуметах?

А что делать с другими сущностями?

Аватар пользователя vlucas vlucas 8 февраля 2018 в 20:16

Василий Сергеевич wrote:

Соответственно, нужно во вьюху добавить связь с сущностями ссылаемыми на товар.

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

Аватар пользователя vlucas vlucas 8 февраля 2018 в 20:25

Это я уже видел. Но вопрос не только про коммерцию, а про таксономию в целом. Получается entity везде, а с таксономией до конца не интегрирована?

Аватар пользователя bumble bumble 8 февраля 2018 в 20:29

Иш на орге висит, на счет того чтоб был фильтр по сущности с ID термина.
Вероятно, пока в долгом ящике.

Аватар пользователя vlucas vlucas 8 февраля 2018 в 20:43

У этого, конечно, есть свои плюсы.
Блин, но иногда это просто бесит, вроде так должно быть. а неет, не доделали...

Аватар пользователя gun_dose gun_dose 8 февраля 2018 в 22:59

В семёрке таксономия тоже интегрирована только с нодами. В своё время съел на этом некоторое количество собак. И для нормального отображения всегда нужно переопределять страницу термина вьюсом. В восьмёрке в этом плане всё то же самое. Есть только одна дикая особенность - поле родителя термина какое-то очень специфическое, что его, например тупо нет в объекте термина. На этот счёт в ишью на орге уже который год ведутся активные баталии.

Аватар пользователя vlucas vlucas 9 февраля 2018 в 10:26

gun_dose wrote:
И для нормального отображения всегда нужно переопределять страницу термина вьюсом.

А если использую search api и для каталога и таксономию-характеристики товаров, то получается обычные странички термина вообще не нужны, есть ли способ их закрыть вообще, возвращать 404?

Аватар пользователя gun_dose gun_dose 9 февраля 2018 в 10:49

Всё равно нужны. Оптимальный вариант - поставить панели, на страницах терминов из словаря "Каталог" выводить вьюху с поисковым индексом. А на страницах терминов из словарей характеристик отдавать 404 через те же панели. (вернее через page_manager)

Аватар пользователя gun_dose gun_dose 9 февраля 2018 в 11:08

Создать свой RouteSubscriber и в роуте таксономии заменить дефолтный класс на свой, естественно, унаследовавшись от дефолтного. И там уже делать проверку на принадлежность термина определённому словарю, и отдавать 404 или родительский метод в зависимости от условий.

Аватар пользователя heron77 heron77 18 мая 2018 в 14:14

gun_dose wrote:
для нормального отображения всегда нужно переопределять страницу термина вьюсом

Уже несколько суток бьюсь над этой проблемой. Весь форум на тему сущностей, вьюсов и таксономии проштудировал, но так и не смог настроить вьюс для страницы термина. НО! Получилось настроить вьюс-блок с сущностями и выводить этот блок на странице термина. Отфильтровывал через контекстный фильтр 2-мя способами.
1 - В контекстный фильтр добавить Поле сущности с таксономией - ID термина таксономии из URL
2 - Добавить в Отношения поле сущности с таксономией - В контекстный фильтр добавить (термин из поля) Таксономия: родительский термин - ID термина таксономии из URL
Второй метод использовал для отображения сущностей из уровня ниже текущего термина
Такой блок отображается (есть недостатки, но это уже нюансы).

А вот как вьюс самой страницы термина настроить, так и не понял. Для назначения конкретному словарю своего вьюса использую Taxonomy display

Не подскажите, как вы настраивали вьюс для страницы термина для отображения сущностей? Что и куда прописывали (настраивали) в отношения и(или) контекстные фильтры?

Аватар пользователя gun_dose gun_dose 18 мая 2018 в 14:22

Контекстный фильтр по ИД термина таксономии. Плюс выставить опцию значения по умолчанию "ИД термина таксономии из УРЛ". Всё остальное уже навороты.

Аватар пользователя heron77 heron77 18 мая 2018 в 16:29

Так в том и дело, что нет такого контекстного фильтра, если используешь Сущность. В моем данном конкретном случае используется сущность Commerce:product. Но пробовал и кастомные сущности - с тем же эффектом.

Появляется контекстный фильтр "Термин таксономии: ID термина" только после того, как в Отношения добавляешь поле сущности с таксономией. НО! Появляться-то этот фильтр появляется, только толку от этого никакого. Потому, что страница пустая выводится. Как-будто отказывается брать ID термина из URL. Самое удивительное в том, что если делать и выводить блок, то он спокойно берет этот "ID термина из URL" и нормально все выводит.

Аватар пользователя heron77 heron77 18 мая 2018 в 20:28

Нет. Может и должен, только не понятно кому и чему. Во-первых, пока в отношениях не включишь поле с категорией, то в контекстном фильтре ничего и близкого с таксономией не появляется от слова "совсем". Во-вторых, что бы я ни делал, блоки работают, страницы не работают. Общался тут намедни с парнем, который входит в ядро команды разработчиков D8, так он не удивился ситуации и сказал, что нужно через панели решать. Буду смотреть на панели. Раньше сталкивался по мелочи в готовых сборках с панелями, но не заморачивался с тем, как эти панели устроены и работают - нужды не возникало.