Автоматическое заполнение полей ноды из дочерней ноды

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

Аватар пользователя VVS VVS 25 сентября 2022 в 18:33

Пример:
Дано:
Тип ноды Школа с полями: название, адрес, фото.
Тип ноды Ученик: ФИО, школа (ссылка на ноду), адрес школы, фото школы.

Задача:
При добавлении/редактировании ученика, и выборе школы, обновлять значение адрес школы у ученика.

Решение:
Нашёл модуль, но судя по описанию предзаполнить значения полей можно только перейдя по специальной ссылке из школы на форму создания ученика.
Prepopulate тоже из урла берёт значения.

Возможно, есть решения сделать это программно, буду благодарен за наводку. Но мне кажется, подобная задача уже решалась неоднократно, я просто неверно ищу.

Комментарии

Аватар пользователя marassa marassa 25 сентября 2022 в 18:51

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

Аватар пользователя VVS VVS 25 сентября 2022 в 19:01

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

Но ваши вопросы заставляют задуматься об упрощении задачи.

Аватар пользователя OldWarrior OldWarrior 26 сентября 2022 в 12:38

VVS wrote: Возможно, есть решения сделать это программно, буду благодарен за наводку.

hook_presave() если коротко.

Проверяем, что сохраняемая сущность - нода типа "Ученик" и если да, то читаем поле адреса из ссылки на ноду типа "Школа" и записываем его в соответствующее поле.

VVS wrote: Но ваши вопросы заставляют задуматься об упрощении задачи.

Не уверен, что даю дельный совет, но возможно что-то параграфами можно намутить, если без кодинга. Скажем, тип параграфа содержит общие поля для обоих типов (адрес и пр.). Параграфы всегда присоединяются к сущностям через ссылку. Таким образом можно ссылаться на один и тот же адрес и из "Школы" и из "Учеников".

Только - тссс! - чтобы gun_dose последнее не услышал.

Аватар пользователя marassa marassa 26 сентября 2022 в 19:32

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

Аватар пользователя gun_dose gun_dose 26 сентября 2022 в 19:43
2

Не надо перекладывать данные из одной сущности в другую. Если это одна и та же информация, она должна храниться только в одном месте и никак иначе.

И вообще, непонятно, чем конкретно эта задача выходит за рамки обычного entity reference? Тут вообще не нужно ничего кодить и не нужны никакие модули. Просто сделайте для школы вью мод с отображением нужных полей, а в сущности ученика настройте отображение школы в нужном вью моде.

Аватар пользователя VVS VVS 27 сентября 2022 в 21:27

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