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_text
y 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_text
y field_my_yetanothertext
este último tiene un nombre de máquina diferente.
Lo que quiero hacer, si se selecciona un my_content
formulario de edición / agregar, en field_my_userreference
un 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.js
crear comportamiento:También puede usar
hook_form_FORM_ID_alter()
para agregar#ajax
pará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éndoloisset
para 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_alter
correctamente, solo recuerde tomar ambos$form
y$form_state
por 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#ajax
es 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éndoloisset
para 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.
#ajax
propiedad 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