Frage

Wie würden Sie gehen über eine Schritt für Schritt Form erstellt, die AJAX durch Drupal verwendet das nächste Formular Schritt zu ziehen?

Beispiel:

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

Wenn diese Person Klicks auf entweder wie oder nicht mögen, ich will AJAX verwenden, um den nächsten Teil der Form zu erkennen und ziehen, entfernen / Ausblenden den ersten Abschnitts, da es nicht erforderlich ist, und den nächsten Abschnitt präsentieren.

Beispiel:

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


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

Was ist der beste Weg, dies durch Drupal-Formular-API zu tun? Ich weiß, wie die Formen und Module zu bauen, aber ich habe nie AJAX noch verwendet. Ich kenne ein paar Dinge gibt es aus, dass zu helfen sollen, aber ich wollte wissen, ob jemand hier hat es getan und wie sie es genähert.

War es hilfreich?

Lösung

Sie möchten vielleicht einen Blick auf die AHAH Helfer Modul geben.

Andere Tipps

in der Regel bin ich mit einem Fieldset volle Formular erstellen, so dass sie dann manuell durch jquery steuern.
i annehmen, dass es viele bereit Module in Drupal gehen, einige davon:
http://drupal.org/project/conditional_fields / http://drupal.org/project/multistep
auch: http://www.google.ru/search?q= drupal + vielstufige + ajax + Form

Wenn Sie keinen Code schreiben wollen, und nicht die eingegebenen Daten müssen Drupal Knoten sein, schlage ich das Webformular-Modul. Es hat eine ziemlich einfache Benutzeroberfläche für Formulare erstellen, und können Sie mehrseitige Formulare mit bedingten Feldern tun tun. Sie können dann die Ergebnisse als CSV exportieren, per e-Mail, etc.

Ich habe Lösungen gemacht für dieses Problem in Drupal 7. Ersten, das ich es mit Ajax lösen, wie angefordert wurde (wenn jemand möchte ich dies zu drupal6 umwandeln kann), jedoch sollte es besser sein, dies mit Attribute #states zu lösen. So ist auch eine Lösung im Boden unter Verwendung Staaten.

Wie dies mit Ajax lösen:

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'];
}

Hier ist die Lösung #states (Der bevorzugte Weg, um es zu lösen) mit:

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top