【问题标题】:In Drupal 7, how do I show a new form that can edit data selected from a different form?在 Drupal 7 中,如何显示可以编辑从不同表单中选择的数据的新表单?
【发布时间】:2010-07-29 16:26:09
【问题描述】:

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

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

目前,似乎什么都没有发生。我知道 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 站点。

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

【问题讨论】:

    标签: forms drupal drupal-fapi


    【解决方案1】:

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

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

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

    【讨论】:

    • 好提示,我会研究一下。但我仍然想知道如何在没有 ajax 的情况下做到这一点。
    • 好吧,试试看。仍然无法正确完成所有操作。对于我的试验故事:drupal.org/node/872088
    猜你喜欢
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    相关资源
    最近更新 更多