0

我有一个表格选择表格,其中列出了几个项目。当用户选择一个或多个项目并单击编辑按钮时,我希望显示一个允许他们编辑项目的新表单。

我正在生成新的表单结构,但是在单击编辑按钮后我无法显示它。

目前,似乎什么都没有发生。我知道 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 函数中使用正确的代码。我尝试了几种不同的方法,但还没有奏效。我所做的谷歌搜索也没有帮助。我还广泛搜索了 Drupal API 和 Drupal Form API 站点。

无论如何,我认为这就是您可能需要的所有信息来帮助我。提前致谢!

4

1 回答 1

0

我相信如果你有一个表单函数,根据输出显示不同的字段,你可能会有更好的运气。

如果您这样做,您甚至可以使用表单 ajax 方法来自动更新您的表单。

看看这个howto,看看你是否认为这种方法对你有用。

于 2010-07-30T08:19:06.580 回答