Выбор термина таксономии из связанного через EntityReference словаря

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

Аватар пользователя dlnsk dlnsk 20 февраля 2015 в 10:26

Есть два типа материала:
1.Page (имеет поле EntityReference - связь со словарем таксономии)
2.Article (имеет поля: EntityReference - связь с Page и "Ссылка на термин" - для связи с термином таксономии)
Для каждной ноды типа Page, при ее создании, с помощью Rules создается уникальный словарь таксономии и нода связывается с ним через EntityReference.

При создании материала типа Article он связывается с каким-то материалом типа Page.

Необходимо:
Желательно с помощью Ajax, получить возможность выбрать для Article термин таксономии именно из того словаря, который связан с выбранным материалом типа Page.

Комментарии

Аватар пользователя Chyvakoff Chyvakoff 20 февраля 2015 в 11:04

"dlnsk" wrote:
2.Article (имеет поля: ... "Ссылка на термин" - для связи с термином таксономии)

Если я правильно помню - в поле типа "ссылка на термин" жестко задан словарь, термины которого можно выбирать.
У вас же 10 материалов типа Article и у каждой одно и то же поле смотрит в разные словари. Так?

Тут надо на лету подменять словарь+наверняка валидация формы не пройдет, там тоже что-то делать придётся.

Может быть вы что-то делаете не так?

Аватар пользователя dlnsk dlnsk 20 февраля 2015 в 11:32

"Chyvakoff" wrote:
У вас же 10 материалов типа Article и у каждой одно и то же поле смотрит в разные словари. Так?

В общем да... ;о)
В Article, поле (назовем его field_term) смотрит на термины в разных словарях.
Насколько я понял из какого-то текста (и только что проверил в БД), технически нет разницы что термины находятся в разных словарях, т.к. все термины всех словарей находятся в одной таблице, а в field_term сохраняется id самого термина.

В целом можно заменить тип поля "Ссылка на термин" на еще один EntityReference.

"Chyvakoff" wrote:
Может быть вы что-то делаете не так?

Может быть... Но у меня в каждом материале Page действительно различные наборы терминов из которых я должен выбрать один в Article.
Буду рад если вы наведете меня на более адекватное решение.
Спасибо!

Аватар пользователя dlnsk dlnsk 20 февраля 2015 в 11:56

В целом, наверное я мог бы хранить все термины в одном словаре, но в разных ветках. Правда тогда возникает несколько проблем:
1. Как изолировать эти ветки от пользователя, чтобы на его взгляд это выглядело как разные словари.
2. В разных ветках одного словаря должны храниться одинаковые термины, а одинаковые термины - это как раз то, от чего таксономия призвана избавить...

Аватар пользователя Chyvakoff Chyvakoff 20 февраля 2015 в 17:20

"dlnsk" wrote:
я мог бы хранить все термины в одном словаре, но в разных ветках.

Я так бы и сделал.
"dlnsk" wrote:
Как изолировать эти ветки от пользователя, чтобы на его взгляд это выглядело как разные словари.

Да легко, альтери форму и выпиливай ненужные термины.
"dlnsk" wrote:
В разных ветках одного словаря должны храниться одинаковые термины, а одинаковые термины - это как раз то, от чего таксономия призвана избавить

Так не бывает. "Одинаковых терминов" не существует. Каждый термин уникален, по айдишнику(в таблице поле tid). И в двух разных словарях не может быть один и тот же термин. Каждый термин принадлежит одному словарю и только одному. Так что в вашем подходе таксономия вас не избавит.

Решение такое.
Создаёте 1 словарь.(никаких веток не понадобится)
У ноды типа Page есть поле типа "ссылка на термин"
Для каждой ноды типа Page поле "ссылка на термин" заполняете терминами из словаря. Теми, которые нужны данной ноде. В дальнейшем к другим нодам можно цеплять ранее использованные термины.(Таки избавит)
У ноды типа Article тоже поле "ссылка на термин"
Альтерите форму редактирования ноды типа Article. В альтере смотрите с каким Page она связана. Подгружаете этот Page и беретё tid`ы терминов, который прикреплены к этой Page. Поле(делайте выпадающий список) для выбора термина(в Article) заполняете только tid`ами подгруженной Page.

В принципе профит. Можно ещё дополнительную валидацию к сохранению Article приделать.

Аватар пользователя dlnsk dlnsk 20 февраля 2015 в 17:54

"Chyvakoff" wrote:
В дальнейшем к другим нодам можно цеплять ранее использованные термины.

Вот в том то и дело, что это для меня категорически неприемлемо. Переименование термина связанного с одной Page не должно влиять на термины связанные с другим Page.

И еще: термины для Page должны иметь древовидную структуру (поэтому я и говорил про помещение в отдельные ветки).

Аватар пользователя Chyvakoff Chyvakoff 21 февраля 2015 в 10:04

Значит как-то без таксономии надо обыграть. Термины для того и нужны, чтобы 1 термин юзало много нод. Если получится 1 термин используется 1 раз для 1 ноды-значит почти наверняка делаете не так.
Подумайте как ещё можно обустроить связи.