Как вывести нужные поля в зависимости от выбранного термина в материале другого типа?

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

Аватар пользователя portfolio portfolio 23 мая 2018 в 15:07

Приветствую!

Помогите пожалуйста решить такую задачу.

Исходные данные:

1. Есть словарь с терминами таксономии:

-Категория услуг 1
-Категория услуг 2

2. Есть тип материала Анкета, при создании которой зарегистрированный пользователь выбирает термины таксономии этих Категорий услуг, которыми он занимается.
Это либо все 2 Категории услуг сразу, либо только Категория услуг 1 или только Категория услуг 2

3. Есть тип материала Прайс-лист, в котором созданы поля для ввода значений цены этим зарегистрированным пользователями.

Прайс лист:

Категория услуг 1
- услуга №1 - цена 1 руб
- услуга №2 - цена 1 руб

Категория услуг 2
- услуга №1 - цена 1 руб
- услуга №2 - цена 1 руб

ВОПРОС: Как сделать так, чтобы если пользователь выбрал только термин Категория услуг 1 при создании Анкеты, то ему показывались именно только поля ввода цен для Категории 1 в типе материала Прайс,. Т.е. поля ввода цен для услуг Категории 2 не показывались.

Понимаю, что здесь нужно использовать Reference и т.д., но как это сделать не знаю.

Заранее спасибо за помощь!

Комментарии

Аватар пользователя OldWarrior OldWarrior 23 мая 2018 в 19:47

Я бы решал вопрос программно. По крайней мере - я не припоминаю никаких "кликабельных" средств навскидку. Может, что-то и можно нарулить путём нагромождения пачки модулей, но это какой-то изврат, имхо.

entity reference в общем-то необязательно, если у пользователя заведомо только по одному материалу типа "Прайс" и типа "Анкета". Их nid'ы можно получить программно по uid автора. Собственно, программно всё сводится к одному хуку hook_form_alter()

Аватар пользователя OldWarrior OldWarrior 23 мая 2018 в 20:29

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

Аватар пользователя OldWarrior OldWarrior 23 мая 2018 в 21:12
1

Гарантированное определённое решение нужно писать. Могу сориентировать как:

1. Создаём модуль
2. В нём хук hook_form_alter()
3. В этом хуке проверяем, что текущая форма - именно форма редактирования материала "Прайс"
4. В этом же хуке читаем uid пользователя и получаем по нему из БД ноду типа "Анкета". Проверям состояние полей Категории услуг (1 и 2). Для тех из них, которые не определены (т.е. не выбраны) - ставим атрибуты соответствующих полей формы "Прайс" в #access = FALSE (что скрывает эти поля формы)
5. Bingo.

Аватар пользователя portfolio portfolio 23 мая 2018 в 22:31

Код писать для меня не вариант. Я не знаю толком PHP И мне кажется что такое возможно реализовать с помощью модулей

Аватар пользователя OldWarrior OldWarrior 23 мая 2018 в 22:39

portfolio wrote:

И мне кажется что такое возможно реализовать с помощью модулей

Мне кажется, что нет.

PS. Если что - пишите в личку, за вознаграждение сбацаю "определённое" программное решение.

Аватар пользователя postgres postgres 24 мая 2018 в 13:14

Вам надо создать все fieldset для всех желаемых типов материалов. A conditions покажет только те, которые выбраны на форме...

Аватар пользователя portfolio portfolio 24 мая 2018 в 14:39

Посмотрите пожалуйста вот этот модуль https://www.drupal.org/project/field_conditional_state
Видео https://youtu.be/BvboSBIpitc

Он по идее решает задачу. Может подскажете как мне создать зависимость между полем и термином таксономии из разных типов материала?

Вы в Conditionаl кажется нашли как это сделать. Может и здесь решите эту задачу

Аватар пользователя portfolio portfolio 24 мая 2018 в 14:35

Модуль должен помочь, зависимости выставляет

Осталось только догадаться как связать поле с термином таксономии в другом типе материала.

Аватар пользователя OldWarrior OldWarrior 24 мая 2018 в 14:46

portfolio wrote:

Осталось только догадаться как связать поле с термином таксономии в другом типе материала.

Т.е. по сути осталось решить основную проблему? )

Я повторю свой совет: не морочьте себе голову. Начните сами писать модуль, быстрее доберётесь до результата, даже если плохо знаете PHP. Да и в будущем пригодятся навыки.

Аватар пользователя fairrandir fairrandir 25 мая 2018 в 11:09
2

На друру кроме свидетеля секты "хлебные крошки на вьюс", появился свидетель секты "делаем всё через вебформ".

Как я вижу решение задачи. Понадобится Inline Entity Form (ief), Entity Reference и всё.
1. Тип материала "Анкета" заполняется как заполнялось.
2. Добавляется тип материала "Прайс для категории".
3. В него добавляется поле для выбора категории. И тут самая суть - значения для поля можно фильтровать с помощью вьюс. Создаётся вьюха, добавляется связь с текущим пользователем, добавляется связь с материалом "Анкета" этого пользователя, и выводятся только те термины, которые выбраны в анкете.
4. В тип материала "Прайс" добавляется связь с материалом "Прайс для категории", виджет IEF.

Аватар пользователя Semantics Semantics 25 мая 2018 в 13:17

Ребята, в топике какой-то ад.
Совет делать через вебформ - не менее странный, чем совет делать через параграфы, например.
Давайте тормознём со странными предложениями, я и так планировал скоро рассказывать историю магазина, где цены к товарам записываются в alt картинок в imagefield.

Я считаю, что вариант @fairrandir самый близкой к правде, об IEF я сразу упоминал.
Но я бы, конечно, пересматривал структуру.

Аватар пользователя OldWarrior OldWarrior 25 мая 2018 в 17:00

Semantics wrote:

Совет делать через вебформ - не менее странный, чем совет делать через параграфы, например.

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

Аватар пользователя OldWarrior OldWarrior 25 мая 2018 в 13:34

Я, кстати, лайкнул решение fairrandir, хотя, как писал в снесённой ветке, не фанат такого подхода. Но это хоть что-то внятное из предложенных "мышечных" способов.

Я как-то не могу понять (и тут вопрос, наверное, в первую очередь к ТС): какой спортивный интерес заключён в наруливании довольно замороченного функционала с помощью пачки готовых модулей, когда в итоге по суммарным затратам времени проще самостоятельно написать не такой уж сложный модуль на 50-70 строк кода, который решит все проблемы на раз-два?

Всё равно админы сайтов как правило приходят к необходимости решать какие-то узкие задачи кодом и со временем осваивать Drupal API в той или иной степени приходится волей-неволей. Я не говорю о реально сложных задачах, где нужен уже спец-программист.