Вопрос по forms, drupal – Drupal Form: хотите показать предыдущее значение формы как default_value на странице

7

Моя цель - если пользователь отправляет эту форму с & quot; Название продукта & quot; значение как "YYY". На странице отправки необходимо перезагрузить, но на этот раз & quot; Название продукта & quot; должно отображаться предыдущее значение по умолчанию, как в этом случае «YYY».

Вот мой код ...

function addnewproduct_page () {
  return drupal_get_form('addnewproduct_form',&$form_state);
}

function addnewproduct_form(&$form_state) {
  $form = array();


    $formproductname['productname'] = array (
    '#type' => 'textfield',
    '#title' => t('Product Name'),
    '#required' => TRUE,
        '#size' => '20',
  );

    if (isset($form_state['values']['productname'])) 
    {
    $form['productname']['#default_value'] = $form_state['values']['productname'];
  }

  //a "submit" button
  $form['submit'] = array (
    '#type' => 'submit',
    '#value' => t('Add new Product'),  
  );
  return $form;
}

Ваш Ответ

8   ответов
-1

помещая переданное значение в переменную $ _SESSION в ловушку отправки. Затем при следующей загрузке формы я проверяю переменную $ _SESSION на соответствующий ключ и помещаю значение в слот #default_value, если там что-то есть.

0

  $form_state['rebuild'] = TRUE;

версия: Drupal 7

-1

что это будет работать для вас, но вы можете попробовать добавить#default_value ключ к массиву форм

$form['productname'] = array (
'#type' => 'textfield',
'#title' => t('Product Name'),
'#required' => TRUE,
'#size' => '20',
'#default_value' => variable_get('productname', ''),
);

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

Это слишком глобальное решение, излишнее
0

когда мы говорим о сложных формах:

foreach ($form_state['values'] as $form_state_key => $form_state_value) {
    $form_state['storage'][$form_state_key] = $form_state['values'][$form_state_value];
}
15

правки для хранения значений между шагами. Так что добавьте функцию отправки так:

function addnewproduct_form_submit ($form, &$form_state) {
  // Store values
  $form_state['storage']['addnewproduct_productname'] = $form_state['values']['productname'];
  // Rebuild the form
  $form_state['rebuild'] = TRUE;    
}

Тогда ваша функция конструктора форм станет:

function addnewproduct_form(&$form_state) { 

$form = array();

$form['productname'] = array (
'#type' => 'textfield',
'#title' => t('Product Name'),
'#required' => TRUE,
'#size' => '20',

);

if (isset($form_state['storage']['addnewproduct_productname'])) {
  $form['productname']['#default_value'] = $form_state['storage']['addnewproduct_productname'];
}

return $form;
}

Просто помните, что ваша форма будет генерироваться до тех пор, пока заполнено ваше $ form_state [& amp; хранилище &]. Поэтому вам нужно будет настроить обработчик отправки и сбросить ($ form_state [& amp; хранилище &];)), когда будете готовы сохранить значения в базе данных и т. Д.

Если ваша форма больше похожа на фильтр т.е. используется для отображения, а не хранения информации, то вы можете просто обойтись

function addnewproduct_form_submit ($form, &$form_state) {
  // Rebuild the form
  $form_state['rebuild'] = TRUE;    
}

Когда форма перестраивается, у нее будет доступ к $ form_state ['values' 'из предыдущей итерации.

отличный ответ Я искал это несколько дней! +1
+1 за подробные примеры!
0

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

function myform_submit($form, &$form_state) {

  $CourseCat = $form_state['values']['coursecat']; 

  drupal_goto("courses" , array('query' => 
    array('cat'=>$CourseCat))
  );
}

В хуке сборки формы все, что я делал, это получал текущую строку запроса и использовал ее в качестве значений по умолчанию, например, так:

function myform_form($form, &$form_state) {
  $Params = drupal_get_query_parameters ();
  $CatTree = taxonomy_get_tree(taxonomy_vocabulary_machine_name_load ('category')->vid);

  $Options = array ();
  $Options ['all'] = 'Select Category';
  foreach ($CatTree as $term) {
        $Options [$term->tid] = $term->name;
  } 
  $form['cat'] = array(
    '#type' => 'select',
    '#default_value' => $Params['cat'],      
    '#options' => $Options
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#default_value' => 'all',
    '#value' => t('Filter'),
  );

  return $form;
}
0

кто ищет ответ здесь при использовании веб-формы (с которой я только что боролся), вот что я в итоге сделал:

//in hook_form_alter
$form['#submit'][] = custom_booking_form_submit;

function custom_booking_form_submit($form, &$form_state) {
//  drupal_set_message("in form submit");
//  dpm($form_state, 'form_state');

    foreach ($form_state['values']['submitted_tree'] as $form_state_key => $form_state_value) {

        $form_state['storage'][$form_state_key] = $form_state_value;
    }
}

Примечание: добавлено & apos; как это было потеряно

1

$formproductname['#redirect'] = FALSE;

В вашем массиве $ formproductname.

Похожие вопросы