2010-07-29 60 views
0

我有一个tableselect窗体列出几个项目。当用户选择一个或多个项目并点击编辑按钮时,我想要一个新的窗体出现,让他们编辑项目。在Drupal 7中,如何显示可以编辑从不同表单中选择的数据的新表单?

我有新的表单结构正在生成,但我不能让它显示在点击编辑按钮后。

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

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

回答

0

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

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

看看this howto看看你是否认为这种方法适合你。

+0

好的提示,我会研究它。但我仍然想知道如何在没有Ajax的情况下做到这一点。 – 2010-08-02 15:48:43

+0

正确,尝试。仍然无法正常工作。对于我的试验故事:http://drupal.org/node/872088 – 2010-08-03 16:21:46

相关问题