Mam bardzo złożoną sytuację, w której potrzebuję porady. Mam typ zawartości my_content
, do którego jest dołączone pole kolekcji pól field_mycollection
, które ma pole odniesienia encji odnoszące się do użytkownika field_my_userreference
, pole telefonu, pole field_my_phone
tekstowe field_my_text
i inne pole tekstowe field_my_anothertext
.
My Content
|_ field_mycollection
|_ field_my_userreference
|_ field_my_phone
|_ field_my_text
|_ field_my_anothertext
Jednostka użytkownika ma również pola field_my_phone
, field_my_text
a field_my_yetanothertext
ta ostatnia ma inną nazwę komputera.
Co chcę zrobić, jeśli w my_content
formularzu edycji / dodania field_my_userreference
użytkownik jest zaznaczony, pozostałe pola powinny zostać automatycznie wypełnione danymi wybranego użytkownika. Pola automatycznie wypełnione powinny nadal być edytowalne.
Jak mogę osiągnąć ten cel? Chciałbym to zrobić, jeśli to możliwe, z pewnym kodowaniem, używając hook_form_FORM_ID_alter()
.
Odpowiedzi:
Jeśli chcesz, aby stało się to na żywo, a wszystkie pola są już w formularzu, najbezpieczniejszym sposobem byłoby
hook_form_FORM_ID_alter()
dodanie następujących elementów do formularza:Następnie w
copy_field_value.js
tworzeniu zachowania:Można również użyć
hook_form_FORM_ID_alter()
do dodania#ajax
parametru do pola źródłowego, ale spowoduje to, że formularz będzie wywoływał serwer na każdej kopii pola. Jeśli potrzebujesz zapytać bazę danych, jest to dobry sposób. Byłoby dość szerokie, aby opisać to na nowo tutaj. Musisz zmienić$form_state["input"]
tablicę, aby zaktualizować rzeczywiste wartości widoczne dla użytkownika. Zrób to w funkcji tworzenia formularza, owijając go,isset
aby uniknąć powiadomień.Jeśli twoim elementem formularza jest
$form["something"]["something"]["element"]
, jego wartość będzie$form_state["input"]["something"]["something"]["element"]
zawarta - i możesz go ustawić whook_form_alter
porządku, pamiętaj tylko, aby wziąć oba$form
i$form_state
przez odniesienie.Uwaga :
.on()
metoda została dodana w jQuery 1.7, więc będziesz potrzebować jQuery Update, aby użyć tej odpowiedzi bezpośrednio lub przetłumaczyć mój kod do użycia.change()
lub.blur()
metody.źródło
<input>
tagów za pomocą Firebug lub podobnego narzędzia dla swojej ulubionej przeglądarki. Lub użyj dowolnego innego selektora jQuery. Stanie się tak tylko w przeglądarce, więc masz to, co masz na ekranie. Z drugiej strony, jeśli chcesz faktycznie zapytać do bazy danych (wydaje mi się, że tego nie zauważyłem),#ajax
jest to droga. Ale byłoby dość szerokie. Musisz zmienić$form_state["values"]
tablicę, aby zaktualizować rzeczywiste wartości widoczne dla użytkownika. Zrób to w funkcji tworzenia formularza, owijając go,isset
aby uniknąć powiadomień.Możesz to zrobić za pomocą obliczonego modułu polowego
źródło
Chcę napisać, jak to osiągnąłem dzięki wielkiej pomocy @ Mołot.
#ajax
właściwość polafield_my_userreference
.Mój kod wygląda następująco:
źródło
To może być trochę późno, ale wydaje się, że ten moduł https://www.drupal.org/project/entityreference_autofill robi to, co opisujesz. Użyłem go i może ci również pomóc.
źródło