Как в Drupal 7 показать новую форму, которая может редактировать данные, выбранные из другой формы? - PullRequest
0 голосов
/ 29 июля 2010

У меня есть форма выбора таблицы, в которой перечислены несколько элементов.Когда пользователь выбирает один или несколько элементов и нажимает кнопку редактирования, я хочу, чтобы появилась новая форма, позволяющая им редактировать элементы.

У меня создается новая структура формы, но я не могузаставить его отображаться после нажатия кнопки редактирования.

В настоящее время, похоже, ничего не происходит.Я знаю, что форма выбора таблицы отправляется правильно, и функция создания формы условия редактирования работает правильно.Я протестировал его с 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.

В любом случае, я думаю, что это вся информация, которая может вам понадобиться, чтобы помочь мне.Заранее спасибо!

1 Ответ

0 голосов
/ 30 июля 2010

Полагаю, вам повезет больше, если у вас есть одна функция формы с различными полями, отображаемыми в зависимости от вывода.

Если вы сделаете это, вы даже сможете использовать методы ajax формы для автоматического обновления формы.

Посмотрите это руководство , чтобы узнать, считаете ли выподход будет работать для вас.

...