У меня очень сложная ситуация, когда мне нужен совет. У меня есть тип контента my_content
, к которому прикреплено поле коллекции полей field_mycollection
, в котором есть поле ссылки на сущность, ссылающееся на пользователя field_my_userreference
, телефонное поле field_my_phone
, текстовое поле field_my_text
и другое текстовое поле field_my_anothertext
.
My Content
|_ field_mycollection
|_ field_my_userreference
|_ field_my_phone
|_ field_my_text
|_ field_my_anothertext
Пользовательский объект также имеет поля field_my_phone
, field_my_text
и field_my_yetanothertext
последний из них имеет другое имя компьютера.
Что я хочу сделать, если в my_content
форме редактирования / добавления field_my_userreference
выбран пользователь, остальные поля должны быть автоматически заполнены из данных выбранного пользователя. Автоматически заполненные поля должны быть доступны для редактирования.
Как я мог достичь этой цели? Я хотел бы сделать это, если это возможно, с некоторым кодированием, используя hook_form_FORM_ID_alter()
.
Ответы:
Если вы хотите, чтобы это происходило вживую и все поля уже были в форме, самым безопасным способом было бы
hook_form_FORM_ID_alter()
добавить следующие элементы в форму:Тогда в
copy_field_value.js
создании поведения:Вы также можете использовать
hook_form_FORM_ID_alter()
для добавления#ajax
параметра в исходное поле, но это сделает вашу форму для вызова сервера для каждой копии поля. Если вам нужно на самом деле запросить базу данных, это путь. Было бы довольно широко описать это здесь заново. Вам нужно изменить$form_state["input"]
массив, чтобы обновить реальные значения, увиденные пользователем. Сделайте это в функции создания формы, оборачивая ее,isset
чтобы избежать уведомлений.Если ваш элемент формы
$form["something"]["something"]["element"]
, его значение будет в$form_state["input"]["something"]["something"]["element"]
- и вы можете установить его вhook_form_alter
порядке, просто не забудьте взять оба$form
и$form_state
по ссылке.Примечание :
.on()
метод был добавлен в jQuery 1.7, поэтому вам понадобится jQuery Update, чтобы напрямую использовать этот ответ или перевести мой код для использования.change()
или.blur()
метода.источник
<input>
тегов, используя Firebug или аналогичный инструмент для вашего любимого браузера. Или используйте любой другой селектор jQuery. Это произойдет только в браузере, поэтому у вас есть то, что у вас есть на экране. С другой стороны, если вам нужно на самом деле запросить базу данных (кажется, я пропустил это),#ajax
это путь. Но это было бы довольно широко. Вам нужно изменить$form_state["values"]
массив, чтобы обновить реальные значения, увиденные пользователем. Сделайте это в функции создания формы, оборачивая ее,isset
чтобы избежать уведомлений.Вы можете сделать это с помощью модуля вычисляемых полей
источник
Я хочу опубликовать, как я достиг этого благодаря большой помощи @ Mołot.
#ajax
свойство для поляfield_my_userreference
.Мой код выглядит так:
источник
Это может быть немного поздно, но этот модуль https://www.drupal.org/project/entityreference_autofill , похоже, делает то, что вы описываете. Я использовал это, и это может помочь вам также.
источник