Поделитесь опытом, как вы работаете с таксономией с сущностями (не node) в drupal 8?
Когда только поставил drupal 8, срузу поставил commerce 2.
По началу приятно удивился, как стало всё здорово, логично, понятно.
Создал продукт, добавил поля-термины и... Работает как задумано, увы но, таксономия до сих пор работает только с нодами.
Для меня это было удивлением, т.к. всюду заполонили всякие разные entity, а таксономия с ними не работает также как с node-контентом. Конечно есть views и search api, но как-то всё таки не совсем верно, когда переходишь на страницу с термином, ассоциированным с сущностью, а она - пуста.
Речь именно об обычных полях сущности "продукт" не атрибутов, которые могут влиять на цену.
Я уже думал, что если полностью отказаться от таксономии не для нод?
Появилось 2 идеи:
1. Использовать обычные списочные поля, но здесь, как мне кажется плохо именно для "редактора" сайта, ему нужно добавить новую характеристику - иди в управление полями - пугает - опасно, я обычно к таким вещам доступ скрываю.
2. Использовать свою кастомную сущность, например, атрибуты, по типу "продукты" (разумеется убрать лишнее). Сделать на основе entity-reference, но это тоже контент и тоже нужно будет думать, что по нему выводить.
Посоветуйте, как вы решаете этот вопрос и возникает ли он у вас вообще?
Комментарии
Там же все вьюхами, а таксономия привязывается референсом.
Соответственно, нужно во вьюху добавить связь с сущностями ссылаемыми на товар.
Где вьюхами? Страница термина - это не вьюха
В 8ке - вьюха (admin/structure/views/view/taxonomy_term/edit).
Наверное, немного не поняли.
Я говорю не о странице администрирования, а о странице термина.
Наверно, да...
Еще раз. В 8ке - все страницы вывода списков контента (список нод, список терминов, список товаров, список контента и т.п.), все это - выводится представлениями.
Ссылка вверху прямо на страницу редактирования той вьюхи, которая выводит страницу терминов.
Да, но более точнее, представления переопределяют эти пути.
т.е. в эту вьюху - taxonomy_term нужно добавить связь на товар, это в отношениях или в аргуметах?
А что делать с другими сущностями?
1. нет, именно выводят
2. в отношениях
3. фильтровать
если не затруднит, можете сделать импорт такой вьюхи. Буду очень благодарен.
Сорри, нет под рукой.
хотя бы здесь подскажите как сделать, я немного не пойму какое отношение на товар добавить во вьюху-содержимое?
Вот такое решение есть на орге: https://www.drupal.org/project/product_taxonomy_filter
Это я уже видел. Но вопрос не только про коммерцию, а про таксономию в целом. Получается entity везде, а с таксономией до конца не интегрирована?
т.е. для каждой сущности писать такой плагин?
Иш на орге висит, на счет того чтоб был фильтр по сущности с ID термина.
Вероятно, пока в долгом ящике.
Вот это и пугает...что вы делаете в таком случае? Как решаете на практике?
Кастом - наше все. EntityFieldQuery в коробке (хвала богам!).
У этого, конечно, есть свои плюсы.
Блин, но иногда это просто бесит, вроде так должно быть. а неет, не доделали...
Ну... Это опенсурс.
Можно просто бесится, а можно помочь сделать.
Это да, но мой уровень, к сожалению, до проблем, типа такой https://www.drupal.org/project/drupal/issues/953034
или такой https://www.drupal.org/project/drupal/issues/2640994 пока не дорос. ))
В семёрке таксономия тоже интегрирована только с нодами. В своё время съел на этом некоторое количество собак. И для нормального отображения всегда нужно переопределять страницу термина вьюсом. В восьмёрке в этом плане всё то же самое. Есть только одна дикая особенность - поле родителя термина какое-то очень специфическое, что его, например тупо нет в объекте термина. На этот счёт в ишью на орге уже который год ведутся активные баталии.
А если использую search api и для каталога и таксономию-характеристики товаров, то получается обычные странички термина вообще не нужны, есть ли способ их закрыть вообще, возвращать 404?
Всё равно нужны. Оптимальный вариант - поставить панели, на страницах терминов из словаря "Каталог" выводить вьюху с поисковым индексом. А на страницах терминов из словарей характеристик отдавать 404 через те же панели. (вернее через page_manager)
а если без панелей как можно отдать 404 на странице конкретного словаря?
Создать свой RouteSubscriber и в роуте таксономии заменить дефолтный класс на свой, естественно, унаследовавшись от дефолтного. И там уже делать проверку на принадлежность термина определённому словарю, и отдавать 404 или родительский метод в зависимости от условий.
Уже несколько суток бьюсь над этой проблемой. Весь форум на тему сущностей, вьюсов и таксономии проштудировал, но так и не смог настроить вьюс для страницы термина. НО! Получилось настроить вьюс-блок с сущностями и выводить этот блок на странице термина. Отфильтровывал через контекстный фильтр 2-мя способами.
1 - В контекстный фильтр добавить Поле сущности с таксономией - ID термина таксономии из URL
2 - Добавить в Отношения поле сущности с таксономией - В контекстный фильтр добавить (термин из поля) Таксономия: родительский термин - ID термина таксономии из URL
Второй метод использовал для отображения сущностей из уровня ниже текущего термина
Такой блок отображается (есть недостатки, но это уже нюансы).
А вот как вьюс самой страницы термина настроить, так и не понял. Для назначения конкретному словарю своего вьюса использую Taxonomy display
Не подскажите, как вы настраивали вьюс для страницы термина для отображения сущностей? Что и куда прописывали (настраивали) в отношения и(или) контекстные фильтры?
Контекстный фильтр по ИД термина таксономии. Плюс выставить опцию значения по умолчанию "ИД термина таксономии из УРЛ". Всё остальное уже навороты.
Так в том и дело, что нет такого контекстного фильтра, если используешь Сущность. В моем данном конкретном случае используется сущность Commerce:product. Но пробовал и кастомные сущности - с тем же эффектом.
Появляется контекстный фильтр "Термин таксономии: ID термина" только после того, как в Отношения добавляешь поле сущности с таксономией. НО! Появляться-то этот фильтр появляется, только толку от этого никакого. Потому, что страница пустая выводится. Как-будто отказывается брать ID термина из URL. Самое удивительное в том, что если делать и выводить блок, то он спокойно берет этот "ID термина из URL" и нормально все выводит.
Тогда контакстный фильтр должен называться так, как называется поле с категорией
Нет. Может и должен, только не понятно кому и чему. Во-первых, пока в отношениях не включишь поле с категорией, то в контекстном фильтре ничего и близкого с таксономией не появляется от слова "совсем". Во-вторых, что бы я ни делал, блоки работают, страницы не работают. Общался тут намедни с парнем, который входит в ядро команды разработчиков D8, так он не удивился ситуации и сказал, что нужно через панели решать. Буду смотреть на панели. Раньше сталкивался по мелочи в готовых сборках с панелями, но не заморачивался с тем, как эти панели устроены и работают - нужды не возникало.
Выложите скрин списка доступных контекстных фильтров при отсутствии связей.