Tengo una situación muy compleja en la que necesito algunos consejos. Tengo un tipo de contenido my_content, que tiene un campo de colección de campos adjunto field_mycollection, que tiene un campo de referencia de entidad que hace referencia al usuario field_my_userreference, un campo de teléfono field_my_phone, un campo de texto field_my_texty otro campo de texto field_my_anothertext.
My Content
|_ field_mycollection
|_ field_my_userreference
|_ field_my_phone
|_ field_my_text
|_ field_my_anothertext
La entidad de usuario también tiene campos field_my_phone, field_my_texty field_my_yetanothertexteste último tiene un nombre de máquina diferente.
Lo que quiero hacer, si se selecciona un my_contentformulario de edición / agregar, en field_my_userreferenceun usuario, los otros campos deben rellenarse automáticamente a partir de los datos del usuario seleccionado. Los campos autocompletados aún deben ser editables.
¿Cómo podría lograr este objetivo? Me gustaría hacerlo, si es posible, con algo de codificación, usando hook_form_FORM_ID_alter().

Respuestas:
Si desea que suceda en vivo, y todos los campos ya están en el formulario, la forma más segura sería usarlo
hook_form_FORM_ID_alter()para agregar lo siguiente a un formulario:Luego, en
copy_field_value.jscrear comportamiento:También puede usar
hook_form_FORM_ID_alter()para agregar#ajaxparámetros al campo de origen, pero haría que su formulario llame a un servidor en cada copia de campo. Si realmente necesita consultar la base de datos, es el camino a seguir. Sería bastante amplio describirlo de nuevo aquí. Debe modificar la$form_state["input"]matriz para actualizar los valores reales que ve el usuario. Hágalo en la función de creación de formularios, envolviéndoloissetpara evitar avisos.Si su elemento de formulario es
$form["something"]["something"]["element"], su valor estará en$form_state["input"]["something"]["something"]["element"], y puede configurarlohook_form_altercorrectamente, solo recuerde tomar ambos$formy$form_statepor referencia.Nota : el
.on()método se agregó en jQuery 1.7, por lo que necesitará jQuery Update para usar esta respuesta directamente o traducir mi código para usar.change()o.blur()método.fuente
<input>identificación de las etiquetas con Firebug o una herramienta similar para su navegador favorito. O use cualquier otro selector jQuery. Sucederá solo en el navegador, por lo que tiene lo que tiene en la pantalla. Por otro lado, si necesita consultar la base de datos (parece que me lo perdí), este#ajaxes el camino a seguir. Pero sería bastante amplio. Debe modificar la$form_state["values"]matriz para actualizar los valores reales que ve el usuario. Hágalo en la función de creación de formularios, envolviéndoloissetpara evitar avisos.Puedes hacerlo usando el módulo de campo calculado
fuente
Quiero publicar cómo lo logré gracias a la gran ayuda de @ Mołot.
#ajaxpropiedad para el campofield_my_userreference.Mi código se ve así:
fuente
Esto puede ser un poco tarde, pero este módulo https://www.drupal.org/project/entityreference_autofill parece hacer lo que está describiendo. Lo he usado y también te puede ayudar.
fuente