在Drupal 7中,如何显示可以编辑从不同表单中选择的数据的新表单?

时间:2010-07-29 16:26:09

标签: forms drupal drupal-fapi

我有一个tableselect表单列出了几个项目。当用户选择一个或多个项目并单击编辑按钮时,我希望显示一个新表单,以便他们编辑项目。

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

目前,似乎没有任何事情发生。我知道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网站。

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

1 个答案:

答案 0 :(得分:0)

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

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

请查看this howto,看看您认为该方法是否适合您。