Estoy tratando de usar ajax para actualizar dos partes diferentes de un formulario drupal desde un solo desenfoque de entrada de formulario.
Tengo el material estándar de ajax en mi entrada:
$my_form['my_input']['#ajax'] = array(
'callback' => 'my_callback',
'wrapper' => 'my_target_div',
'event' => 'blur',
);
Esto funciona bien, intercambiando mi div cuando se actualiza la entrada ... sin embargo , también quiero actualizar otra entrada de formulario en otra parte del formulario con un código diferente como resultado del desenfoque en mi entrada original.
¿Es esto posible, alguna idea?
Editar: para mayor claridad, aquí está mi ejemplo del mundo real:
- Tipo de contenido 'película'
- Se agregó el campo 'título_primero'
- Cuando se actualiza 'primary_title', mi devolución de llamada ajax busca cadenas similares y devuelve html.
El html de la devolución de llamada se inserta en un div vacío.
Esa parte está funcionando muy bien!
Estoy tratando de modificar también la entrada estándar del 'título' del nodo, dándole el valor de 'primary_title' después de haber realizado algunas expresiones regulares para ordenar la cadena (eliminando "The" o "A" desde el principio, etc.) El resultado habrá dos campos de título, uno con el título completo 'título_primario' y otro 'título' recortado que será útil para ordenar y mostrar registros.
Respuestas:
Parece que puede apuntar a diferentes partes de un formulario utilizando comandos ajax, sin embargo, debe elegir devolver solo uno de los siguientes:
HTML o
Una matriz renderizable o
Una matriz de comandos AJAX
En la situación sobre la que escribí originalmente, estaba tratando de devolver una matriz de comandos AJAX y una matriz renderizable, lo que no parece posible.
El código en el módulo de ejemplos muestra la orientación a diferentes partes de un formulario utilizando una matriz de comandos AJAX:
En este ejemplo de código, #html_div obtiene $ text y por separado #html_status obtiene "Actualizado html_command_example con text = $ text;". fecha ('r'). ""
¡Dos ubicaciones diferentes en un formulario con dos piezas diferentes de información de una devolución de llamada ajax!
Al mirar nuevamente en lo que estaba trabajando, me di cuenta de que no necesitaba devolver el campo de título del nodo. Solo será un campo de utilidad, utilizado para ordenar datos en listas.
He ocultado el campo en el formulario de nodo y se completa la segunda vez que se crea mi formulario cuando se activa mi devolución de llamada ajax original.
fuente
Soy bastante nuevo en Drupal pero hasta ahora encontré el marco Ajax bastante flexible. Funciona muy bien siempre que lo use como estaba previsto. Entonces, en su caso, si conoce algunos JS, lo mejor sería hacer ese script usted mismo, debería ser muy ligero.
¡Buena suerte!
fuente
Otra opción, de drupal.org :
Su función de devolución de llamada podría ser tan simple como:
Debe llamarse desde una
#ajax
matriz en un elemento de formulario (field_whatever
para el ejemplo a continuación) definido en unhook_form_FORM_ID_alter()
(o algún tipo de enlace alterno de forma) donde también se prueba$form_state
y se hacen modificaciones a la$form
matriz, como:fuente