Pregunta

¿Cómo haría usted para la construcción de un paso a paso de forma que utiliza AJAX a través de Drupal para tirar de la forma siguiente paso?

Por ejemplo,

Step 1:
   I like Baseball
   I don't like Baseball.

Cuando esa persona hace clic en cualquiera gusta o no le gusta, que quieren utilizar AJAX para reconocer y tire de la siguiente parte de la forma, quitar / ocultar la primera sección ya que no es necesario, y presentar la siguiente sección.

Ejemplo:

Step 1:
   I like Baseball
   *click
(fade out)


Step 2:
   My favorite team is __________
   The player I like most is __________

¿Cuál es la mejor manera de hacerlo a través de formularios de Drupal API? Sé cómo construir las formas y módulos, pero nunca he utilizado AJAX todavía. Sé que existen algunas cosas por ahí que se supone que ayuda, pero quería saber si alguien aquí ha hecho y cómo se acercaban a él.

¿Fue útil?

Solución

Es posible que desee dar un vistazo a la AHAH ayudante módulo .

Otros consejos

Por lo general soy crear la forma completa con conjuntos de campos, a continuación, controlarlos manualmente por jQuery.
Supongo que hay mucho listo para ir módulos en Drupal, algunas de estas:
http://drupal.org/project/conditional_fields / http://drupal.org/project/multistep
También: http://www.google.ru/search?q= drupal + de múltiples etapas + ajax + formulario

Si no desea escribir ningún código, y no necesita los datos introducidos a ser nodos de Drupal, sugiero utilizar el módulo de formulario web. Tiene una interfaz de usuario sencilla bonita para la construcción de formas, y permite que hagas formas de varias páginas con campos condicionales. A continuación, puede exportar los resultados como CSV, enviarlas por correo electrónico, etc.

Me han hecho a las soluciones para este problema en Drupal 7. El primero lo resuelvo con el Ajax como fue solicitado (si alguien quiere puedo convertir esto en drupal6), sin embargo, debe ser mejor para resolver esto utilizando #states atributos. Igualmente hizo una solución en la parte inferior con los estados.

¿Cómo resolver esto utilizando Ajax:

function ajax_in_drupal_form($form, &$form_state)
{
    $baseball = array(
        'like' => t('I like Baseball'),
        'unlike' => t('I don\'t like Baseball')
    );

    $form['step'] = array(
        '#prefix' => '<div id="baseball-wrapper">',
        '#suffix' => '</div>',
    );

    if ($form_state['values']['baseball'] == 'like') {
        $form['step']['team'] = array(
            '#type' => 'textfield',
            '#title' => t('My favorite team is'),

        );
        $form['step']['player'] = array(
            '#type' => 'textfield',
            '#title' => t('The player I like most is'),
        );
    }
    else if ($form_state['values']['baseball'] == 'unlike') {
        $form['step']['other'] = array(
            '#type' => 'textfield',
            '#title' => t('What do you like'),
        );
    }
    else {
        $form['step']['baseball'] = array(
            '#type'    => 'radios',
            '#options' => $baseball,
            '#title'   => t('Select your option'),
            '#ajax' => array(
                'callback' => 'ajax_update_step_callback',
                'wrapper'  => 'baseball-wrapper',
            ),
        );
    }

    return $form;
}

function ajax_update_step_callback($form, $form_state) {
    return $form['step'];
}

Aquí está la solución usando #states (La manera preferida de resolverlo):

function states_in_drupal_form($form, &$form_state)
{
    $baseball = array(
        'like' => t('I like Baseball'),
        'unlike' => t('I don\'t like Baseball')
    );

    // step 1
    $form['step']['baseball'] = array(
        '#type'    => 'radios',
        '#options' => $baseball,
        '#title'   => t('Select your option'),
        '#states' => array(
            'invisible' => array(':input[name="baseball"]' => array('checked' => TRUE),
            ),
        )

    );

    // step 2 like baseball
    $form['step']['team'] = array(
        '#type' => 'textfield',
        '#title' => t('My favorite team is'),
        '#states' => array(
            'visible' => array(':input[name="baseball"]' => array('checked' => TRUE)),
            'visible' => array(':input[name="baseball"]' => array('value'   => 'like')),
        )
    );
    $form['step']['player'] = array(
        '#type' => 'textfield',
        '#title' => t('The player I like most is'),
        '#states' => array(
            'visible' => array(':input[name="baseball"]' => array('checked' => TRUE)),
            'visible' => array(':input[name="baseball"]' => array('value'   => 'like')),
        )
    );

    // step 2 I don't like baseball
    $form['step']['other'] = array(
        '#type' => 'textfield',
        '#title' => t('What do you like'),
        '#states' => array(
            'visible' => array(':input[name="baseball"]' => array('checked' => TRUE)),
            'visible' => array(':input[name="baseball"]' => array('value'   => 'unlike')),
        )
    );

    return $form;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top