it-swarm-es.com

¿Cómo edito una entidad compleja a través de formularios AJAX cargados dinámicamente?

Tengo una entidad de "perfil" con un campo de "educación" (para empezar). Ese campo contiene varios campos de entrada que describen la "educación". De momento tengo "institución" y "año". Creé ese campo con la API de campo en un módulo dedicado y lo adjunté a mi entidad de "perfil" (actualmente este es un paquete profile2). El formulario de entidad funciona como se esperaba, el widget de campo "educación" está incluido y puedo agregar múltiples entradas de "educación". Puedo ver mi entidad y los campos se formatean, y puedo editar mi entidad y los widgets de formulario se renderizan.

--profile entity
----education field
------education a
--------institution a
--------year a
------education b
--------institution b
--------year b

Pero no me gusta el enfoque de todo o nada aquí. Habrá muchos campos diferentes y quiero mostrar la entidad "perfil" con varios botones "editar" y "agregar nueva entrada", que deben cargar el widget de formulario de campo especificado a través de AJAX. La página de perfil en xing.com es un buen ejemplo de lo que estoy tratando de lograr.

¿Es esto posible con el widget de formulario de campos y la API de campo solo, o tengo que implementar la devolución de llamada ajax a través de un enlace de menú, que devuelve un formulario con los campos de entrada necesarios? ¿Puedo incluso usar mi campo "educación" en ese escenario o tengo que trabajar con la API de la entidad y la API de la base de datos?

3
Thomas Schuster

Los formularios que FieldAPI puede crear para usted automáticamente son útiles, pero no muy flexibles. Si está interesado en crear un formulario realmente dinámico, probablemente sea mejor que cree el suyo desde cero y simplemente cree/guarde la entidad mediante programación una vez que se envíe el formulario terminado.

1
Eaton

¿Ha mirado el módulo Ejemplos ? Tienen código de muestra para formularios Ajax, utilizando FormAPI.

0
antgiant

He realizado con éxito una selección jerárquica con ajax en un formulario profile2 utilizado en el registro.

// implementation of hook_form_FORM_ID_alter()    
function impact_registration_form_profile2_edit_library_registration_form_alter(&$form, &$form_state) {
$form['profile_library_registration']['field_library_reg_state']['und']['#options'] = _impact_registration_library_states();
$form['profile_library_registration']['field_library_reg_state']['und']['#ajax'] = array(
                          'callback' => 'impact_registration_state_change_callback',
                          'wrapper' => 'name-select',
                        );
        $selected = isset($form_state['values']['profile_library_registration']['field_library_reg_state']['und'][0]['value']) ? $form_state['values']['profile_library_registration']['field_library_reg_state']['und'][0]['value'] : '';
    $form['profile_library_registration']['field_library_reg_system']['und']['#options'] = _impact_registration_library_names($selected);
    $form['profile_library_registration']['field_library_reg_system']['und']['#prefix'] = "<div id='name-select'>";
    $form['profile_library_registration']['field_library_reg_system']['und']['#suffix'] = "</div>";
        }
    function impact_registration_state_change_callback(&$form, $form_state) {
    return $form['profile_library_registration']['field_library_reg_system']['und'];
            }

Cuando selecciono field_library_reg_state, AJAX devuelve field_library_reg_system, con un valor predeterminado basado en field_library_reg_state 's valor en $form_state. Todo esto está adaptado del ejemplo de ajax. Ahora, lo que no me funciona es agregar una llamada ajax adicional en field_library_reg_system para que rellene previamente un cuadro de texto. La documentación para hacer esto no existe, no entiendo cómo los formularios profile2 y de entidad funcionan de manera diferente a los formularios regulares en drupal. ¿Qué elementos de la matriz se supone que debemos apuntar para el contenedor y la devolución de llamada?

0
mortona42