いくつかのアイテムをリストする 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 のサイトも広範囲に検索しました。
とにかく、私を助けるために必要な情報はこれだけだと思います。前もって感謝します!