Domanda

Come si va sulla costruzione di un passo per passo modulo che utilizza AJAX attraverso Drupal per tirare la forma prossimo passo?

Ad esempio,

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

Quando che i clic persona su entrambi piace o non ti piace, voglio usare AJAX per riconoscere ed estrarre la parte successiva della forma, rimuovere / nascondere la prima sezione dal momento che la sua non è necessario, e presentare la sezione successiva.

Esempio:

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


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

Qual è il modo migliore per farlo attraverso Drupal Form API? So come costruire le forme e moduli, ma non ho mai ancora utilizzato AJAX. So che alcune cose esistono là fuori che dovrebbero aiutare, ma volevo sapere se qualcuno qui ha fatto e come si avvicinarono.

È stato utile?

Soluzione

Si consiglia di dare uno sguardo al AHAH aiutante modulo .

Altri suggerimenti

Di solito io sono creare full form con fieldsets, poi controllarle manualmente da jQuery.
suppongo ci sacco di pronto ad andare moduli in Drupal, alcuni di questi:
http://drupal.org/project/conditional_fields / http://drupal.org/project/multistep
anche: http://www.google.ru/search?q= Drupal + multistep + ajax + modulo

Se non si desidera scrivere alcun codice, e non hanno bisogno i dati inseriti per essere nodi Drupal, vi suggerisco di utilizzare il modulo di modulo web. Ha una semplice interfaccia utente abbastanza per la costruzione di forme, e permette lo fai fare forme più pagine con i campi condizionali. È quindi possibile esportare i risultati in formato CSV, e-mail, ecc.

ho fatto a soluzioni per questo problema in Drupal 7. In primo luogo uno ho risolto con l'Ajax, come è stato richiesto (se qualcuno vuole posso convertire questo per drupal6), tuttavia dovrebbe essere migliore per risolvere questo utilizzando #states attributi. Così anche fatto una soluzione sul fondo utilizzando Uniti.

Come risolvere questo usando 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'];
}

Ecco la soluzione utilizzando #states (Il modo migliore di risolverlo):

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top