2009-07-03 8 views
7

Il mio obiettivo è se l'utente invia questo modulo con il valore "Nome prodotto" come "YYY". Nella pagina di invio dovrebbe ricaricare ma questa volta "Nome prodotto" dovrebbe mostrare il valore di default precedente come in questo caso "YYY".Modulo Drupal: desidera mostrare il valore del modulo precedente come valore_valore nella pagina

Ecco il mio codice ...

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

risposta

-1

Io di solito risolvere questo mettendo il valore inviato nella variabile $ _SESSION nel gancio presentare. Quindi la prossima volta che il modulo viene caricato, controllo la variabile $ _SESSION per la chiave appropriata e metto il valore nello slot #default_value se c'è qualcosa di presente.

15

È possibile utilizzare $ form_state ['archiviazione'] nel gestore di invio per accumulare valori tra i passaggi. Quindi aggiungere una funzione di presentare in questo modo:

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

Allora la vostra funzione di generatore di forma sarebbe diventato:

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

Basta ricordare che il modulo manterrà viene generato fino a quando il $ form_state [ 'stoccaggio'] è imbottito. Quindi sarà necessario regolare il gestore di invio e disinserire ($ form_state ['storage']) quando sono pronti per salvare i valori nel database, ecc.

Se il tuo modulo è più come un filtro, ad es. utilizzato per la visualizzazione piuttosto che la memorizzazione di informazioni, allora si può uscire solo con

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

Quando il modulo ricostruisce avrà accesso a $ form_state [ 'valori'] dalla precedente iterazione.

+0

ottima risposta Ho cercato questo per giorni! +1 – FLY

+0

+1 per esempi dettagliati! – Nafscript

-1

Non sono sicuro se questo dovrebbe funzionare per voi, ma si potrebbe provare ad aggiungere la chiave #default_value alla forma matrice

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

In questo modo se la variabile è impostata sarà afferrare qualunque cosa sia, ma se non si può usare un valore predefinito.

+0

È troppo una soluzione GLOBAL, eccessivo –

1

Drupal farà questo per difetto se si include:

$formproductname['#redirect'] = FALSE; 

In l'array $ formproductname.

0

preferisco di salvare tutti i valori in un momento in cui stiamo parlando di forme complesse:

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

Per chi cerca una risposta qui durante l'utilizzo di moduli elettronici (che ho appena lottato attraverso), ecco quello che ho finito per fare:

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

Nota: aggiunta la ', come è stato perso

0

semplicemente aggiungendo ricostruito = true farà il lavoro:

$form_state['rebuild'] = TRUE; 

versione: Drupal 7

0

Nel mio caso ho avuto un paio di elenchi a discesa. Inoltro del modulo posticipato alla stessa pagina, dove potevo filtrare una vista e volevo mostrare le opzioni selezionate in precedenza.Sul inviando il modulo ho costruito una stringa di query nel gancio di conferma:

function myform_submit($form, &$form_state) { 

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

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

nel gancio modulo di compilazione, tutto quello che ho fatto è stato ottenere la stringa di query corrente e usato quelli come valori di default, in questo modo:

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