2009-07-03 28 views
7

Mục tiêu của tôi là nếu người dùng gửi biểu mẫu này có giá trị "Tên sản phẩm" là "YYY". Trên trang gửi nên tải lại nhưng lần này "Tên sản phẩm" sẽ hiển thị valye trước đó là mặc định như trong trường hợp này "YYY".Mẫu Drupal: muốn hiển thị giá trị biểu mẫu trước đó như default_value trên trang

Đây là mã của tôi ...

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; 
} 

Trả lời

-1

tôi thường giải quyết việc này bằng cách đặt giá trị nộp trong biến $ _SESSION trong nộp móc. Sau đó, khi biểu mẫu được tải tiếp theo, tôi kiểm tra biến $ _SESSION cho khóa thích hợp và đặt giá trị vào vị trí #default_value nếu có bất kỳ thứ gì hiện diện.

15

Bạn có thể sử dụng $ form_state ['storage'] trong trình xử lý gửi để tích lũy các giá trị giữa các bước. Vì vậy, thêm một trình chức năng như vậy:

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;  
} 

Sau đó, chức năng xây dựng hình thức của bạn sẽ trở thành:

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; 
} 

Chỉ cần nhớ rằng hình thức của bạn sẽ tiếp tục được tạo ra càng lâu càng $ form_state của bạn [ 'lưu trữ'] được nhồi. Vì vậy, bạn sẽ cần phải điều chỉnh trình xử lý gửi của bạn và không được đặt ($ form_state ['storage']) khi sẵn sàng lưu các giá trị vào cơ sở dữ liệu, v.v.

Nếu biểu mẫu của bạn giống như bộ lọc. sử dụng để hiển thị hơn là lưu trữ thông tin, sau đó bạn có thể nhận được ngay với chỉ

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

Khi các hình thức tái thiết nó sẽ có quyền truy cập đến $ form_state [ 'giá trị'] từ phiên trước đó.

+0

câu trả lời tuyệt vời Tôi đã tìm kiếm điều này trong nhiều ngày! +1 – FLY

+0

+1 để biết ví dụ chi tiết! – Nafscript

-1

Không chắc chắn nếu điều này sẽ làm việc cho bạn, nhưng bạn có thể thử thêm phím #default_value đến các mảng hình thức

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

Bằng cách đó nếu biến được thiết lập nó sẽ lấy bất cứ điều gì, nhưng nếu không bạn có thể sử dụng giá trị mặc định.

+0

Quá nhiều giải pháp GLOBAL, quá mức –

1

Drupal sẽ làm điều này theo mặc định nếu bạn bao gồm:

$formproductname['#redirect'] = FALSE; 

Trong mảng $ formproductname của bạn.

0

tôi thích để lưu tất cả các giá trị trong một thời gian khi chúng ta đang nói về hình thức phức tạp:

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

Đối với bất cứ ai tìm kiếm một câu trả lời ở đây trong khi sử dụng Webform (mà tôi chỉ phải vật lộn suốt), đây là những gì tôi đã kết thúc lên thực hiện:

//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; 
    } 
} 

Lưu ý: thêm 'vì nó đã mất

0

chỉ đơn giản là thêm xây dựng lại = true sẽ thực hiện công việc:

$form_state['rebuild'] = TRUE; 

phiên bản: Drupal 7

0

Trong trường hợp của tôi, tôi đã có một vài sách thả xuống. Gửi biểu mẫu được đăng trở lại cùng một trang, nơi tôi có thể lọc chế độ xem và tôi muốn hiển thị các tùy chọn đã chọn trước đó.Mở nộp mẫu đơn I đã xây dựng một chuỗi truy vấn trong móc nộp:

function myform_submit($form, &$form_state) { 

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

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

Trong hình thức xây dựng móc, tất cả tôi đã làm là có được chuỗi truy vấn hiện tại và sử dụng những người như các giá trị mặc định, như vậy:

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; 
} 
Các vấn đề liên quan