Ich habe eine sehr komplexe Situation, in der ich Rat brauche. Ich habe einen Inhaltstyp my_content
, an den ein Feldsammlungsfeld angehängt ist field_mycollection
, an das ein Entitätsreferenzfeld verweist, das auf den Benutzer verweist field_my_userreference
, ein Telefonfeld field_my_phone
, ein Textfeld field_my_text
und ein anderes Textfeld field_my_anothertext
.
My Content
|_ field_mycollection
|_ field_my_userreference
|_ field_my_phone
|_ field_my_text
|_ field_my_anothertext
Die Benutzerentität hat auch Felder field_my_phone
, field_my_text
und field_my_yetanothertext
diese hat einen anderen Computernamen.
Was ich tun möchte, wenn in einem my_content
Bearbeitungs- / Hinzufügungsformular field_my_userreference
ein Benutzer ausgewählt ist, sollten die anderen Felder automatisch aus den Daten des ausgewählten Benutzers ausgefüllt werden. Die automatisch ausgefüllten Felder sollten weiterhin bearbeitet werden können.
Wie könnte ich dieses Ziel erreichen? Ich würde es gerne tun, wenn möglich, mit etwas Codierung, mit hook_form_FORM_ID_alter()
.
Antworten:
Wenn Sie möchten, dass dies live geschieht und sich alle Felder bereits im Formular befinden, können Sie
hook_form_FORM_ID_alter()
einem Formular am sichersten Folgendes hinzufügen:Dann im
copy_field_value.js
Verhalten erstellen:Sie können auch Parameter zum Quellfeld
hook_form_FORM_ID_alter()
hinzufügen , aber es würde Ihr Formular veranlassen, bei jeder Feldkopie einen Server aufzurufen. Wenn Sie die Datenbank tatsächlich abfragen müssen, ist dies der richtige Weg. Es wäre ziemlich weit gefasst, es hier neu zu beschreiben. Sie müssen das Array ändern , um die vom Benutzer angezeigten realen Werte zu aktualisieren. Führen Sie dies in der Formularerstellungsfunktion aus und wickeln Sie es ein , um Hinweise zu vermeiden.#ajax
$form_state["input"]
isset
Wenn Ihr Formularelement ist
$form["something"]["something"]["element"]
, ist sein Wert in$form_state["input"]["something"]["something"]["element"]
- und Sie können es inhook_form_alter
Ordnung setzen. Denken Sie daran, beide$form
und als$form_state
Referenz zu nehmen .Hinweis : Die
.on()
Methode wurde in jQuery 1.7 hinzugefügt, sodass Sie jQuery Update benötigen , um diese Antwort direkt zu verwenden, oder meinen Code für die Verwendung.change()
oder.blur()
Methode zu übersetzen.quelle
<input>
Tags mit Firebug oder einem ähnlichen Tool für Ihren bevorzugten Browser. Oder verwenden Sie einen anderen jQuery-Selektor. Dies geschieht nur im Browser, sodass Sie das haben, was Sie auf dem Bildschirm haben. Auf der anderen Seite#ajax
ist der richtige Weg, wenn Sie tatsächlich eine Datenbank abfragen müssen (anscheinend habe ich das verpasst) . Aber es wäre ziemlich breit. Sie müssen das$form_state["values"]
Array ändern , um die vom Benutzer angezeigten realen Werte zu aktualisieren. Führen Sie dies in der Formularerstellungsfunktion aus und wickeln Sie es einisset
, um Hinweise zu vermeiden.Sie können dies mit dem berechneten Feldmodul tun
quelle
Ich möchte veröffentlichen, wie ich es dank der großen Hilfe von @ Mołot erreicht habe.
#ajax
Eigenschaft für das Feld festfield_my_userreference
.Mein Code sieht aus wie:
quelle
Dies mag etwas spät sein, aber dieses Modul https://www.drupal.org/project/entityreference_autofill scheint das zu tun, was Sie beschreiben. Ich habe es benutzt und es kann dir auch helfen.
quelle