私が理解できる唯一の方法は、D7で#ajaxを使用することです。
始める前に知っておくと便利なヒントをいくつか紹介します。
- フォームAPIの#ajaxはすばらしく、学ぶ価値があります
- #statesはORまたはXORをサポートしていません(パッチなし?http: //drupal.org/node/735528 )
- dpm($ form); カスタム送信関数のvar_dump($ form_state)は貴重です
これは、examplesモジュールのAJAXサンプルの1つの修正バージョンです。
function plugin_autotextfields($form, &$form_state) {
    $form['star_rating'] = array(
        '#type' => 'select',
        '#title' => t('Star Rating'),
        '#options' => array('_none' => '- select -', 5 => '5 Star', 4 => '4 Star', 3 => '3 Star', 2 => '2 Star', 1 => '1 Star'),
        '#ajax' => array(
            'callback' => 'plugin_autotextfields_callback',
            'wrapper' => 'textfields',
            'effect' => 'fade',
        ),
    );
    $form['textfields'] = array(
        '#title' => t("Fieldset Name"),
        '#prefix' => '<div id="textfields">',
        '#suffix' => '</div>',
        '#type' => 'fieldset',
        '#description' => t('Where the field will be placed'),
    );
    if (!empty($form_state['values']['star_rating']) && $form_state['values']['star_rating'] == 5) {
        $form['textfields']['review'] = array(
            '#type' => 'textfield',
            '#title' => t('Message if 5 stars'),
        );
    } else if (!empty($form_state['values']['star_rating'])) {
        $form['textfields']['review'] = array(
            '#type' => 'textfield',
            '#title' => t('Message if not 5 stars'),
        );
    }
    $form['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Click Me'),
    );
    return $form;
}
function omfg_autotextfields_callback($form, $form_state) {
    return $form['textfields'];
}
これが同じ問題に遭遇した人の助けになることを願っています:)