0

いくつかのアイテムをリストする tableselect フォームがあります。ユーザーが 1 つ以上の項目を選択して編集ボタンをクリックすると、項目を編集できる新しいフォームが表示されるようにします。

新しいフォーム構造を生成していますが、編集ボタンをクリックしても表示されません。

現在、何も起こらないようです。tableselect フォームが正しく送信されていること、編集用語フォームを作成する機能が正しく動作していることはわかっています。drupal_set_message と var export でテストしました。

では、新しいフォームを表示するにはどうすればよいでしょうか。

これが私の関連コードです:

/**
 * Generate form for listing terms
 */
function markit_form_terms_list()
{

    $form = array();
    $form['terms'] = array(
        '#type' => 'fieldset',
        '#title' => t('List of Terms'),
        );
    $header = array(t('Name'), t('ID'), t('SetID'));
    $form['terms']['items'] = array(
          '#type' => 'tableselect',
          '#header' => $header,
          '#title' => t('Terms'),
          '#options' => markit_get_array_terms(),//drupal_map_assoc($header, 'markit_get_array_terms'),
          '#tree' => TRUE,

    );
    $form['terms']['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Edit Term'),
        '#submit' => array('markit_form_terms_list_submit'),
        );
    /*$form['terms']['delete'] = array(
        '#type' => 'submit',
        '#value' => t('Delete Term'),
        '#submit' => 'markit_form_terms_delete'
        );*/
    return $form;
}

/**
 * Generate form to edit the terms.
 * @param <type> $form
 * @param <type> $form_state
 * @return string
 */
function markit_form_term_edit($form, $form_state)
{
    $newform = array();
    $newform['termstoedit'] = array(
        '#type' => 'fieldset',
        '#title' => t('Edit Term/s'),
        );
    foreach($form_state['values']['items'] as $row)
    {
        if($row!=0)//if a row is not selected, it will be 0. So don't select rows equal to 0.
        {
            $terminfo = markit_get_markterms($row);
            drupal_set_message(var_export($terminfo,true));//['term_name']);
            drupal_set_message($terminfo[0]['term_name']);
            $newform['termstoedit'][$terminfo[0]['term_id']] = array(
              '#type' => 'textfield',
              '#title' => t('Term:'),
              '#default_value' => $terminfo[0]['term_name'],
              '#size' => 60,
              '#maxlength' => 128,
              '#required' => TRUE,
            );
        }
    }    
    $newform['termstoedit']['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Edit Term'),
        '#submit' => array('markit_form_term_edit_submit'),
        );
    drupal_set_message(var_export($newform,true));
    return $newform;
}

function markit_form_terms_list_submit($form,$form_state)
{
    drupal_set_page_content(drupal_build_form('markit_form_term_edit', $form_state));
}

markit_form_terms_list_submit 関数で正しいコードを使用していないと思います。いろいろ試してみましたが、まだうまくいきません。また、私が行った Google 検索も役に立ちませんでした。また、Drupal API と Drupal Form API のサイトも広範囲に検索しました。

とにかく、私を助けるために必要な情報はこれだけだと思います。前もって感謝します!

4

1 に答える 1

0

出力に応じて異なるフィールドが表示される 1 つのフォーム関数がある場合は、運が良いと思います。

これを行うと、フォームの ajax メソッドを使用してフォームを自動更新することもできます。

このハウツーを見て、このアプローチがうまくいくかどうかを確認してください。

于 2010-07-30T08:19:06.580 に答える