2009-07-03 8 views
7

Mon objectif est de soumettre l'utilisateur avec la valeur "Nom du produit" en tant que "YYY". Sur la page de soumission devrait recharger, mais cette fois "Nom du produit" devrait montrer précédent valye par défaut comme dans ce cas "YYY".Formulaire Drupal: pour afficher la valeur du formulaire précédent en tant que valeur par défaut sur la page

Voici mon code ...

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

Répondre

-1

je résous généralement cela en mettant la valeur soumise à la variable $ _SESSION dans le crochet soumettre. Ensuite, la prochaine fois que le formulaire est chargé, je vérifie la variable $ _SESSION pour la clé appropriée et place la valeur dans le slot #default_value s'il y a quelque chose de présent.

15

Vous pouvez utiliser $ form_state ['storage'] dans votre gestionnaire de soumission pour accumuler des valeurs entre les étapes. Ajoutez donc une fonction d'envoi comme ceci:

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

Ensuite, votre forme et fonction constructeur deviendrait:

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

Rappelez-vous simplement que votre formulaire gardera généré tant que votre form_state de $ [ « stockage »] est bourré. Vous devrez donc ajuster votre gestionnaire de soumission et le désinstaller ($ form_state ['storage']) lorsque vous êtes prêt à enregistrer des valeurs dans la base de données, etc.

Si votre formulaire ressemble plus à un filtre. utilisé pour l'affichage plutôt que de stocker les informations, vous pouvez vous en sortir avec juste

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

Lorsque le formulaire reconstruit, il aura accès à form_state $ [ « valeurs »] de l'itération précédente.

+0

bonne réponse J'ai cherché cela pendant des jours! +1 – FLY

+0

+1 pour des exemples détaillés! – Nafscript

-1

Je ne sais pas si cela fonctionnera pour vous, mais vous pouvez essayer d'ajouter la clé #default_value au tableau de forme

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

De cette façon, si la variable est définie, il saisira quoi que ce soit, mais sinon vous peut utiliser une valeur par défaut.

+0

C'est trop GLOBAL solution, overkilling –

1

Drupal le fera par défaut si vous incluez:

$formproductname['#redirect'] = FALSE; 

Dans votre tableau de formproductname de $.

0

Je préfère enregistrer toutes les valeurs dans un moment où nous parlons de formes complexes:

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

Pour ceux qui cherchent une réponse ici tout en utilisant le formulaire Web (que je viens eu du mal à travers), voici ce que je fini jusqu'à faire:

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

note: a ajouté le «comme il a été perdu

0

ajoutant simplement reconstruit = true fera le travail:

$form_state['rebuild'] = TRUE; 
Version

: Drupal 7

0

Dans mon cas, j'ai eu deux ou trois menus déroulants. Soumettre le formulaire posté à la même page, où je pourrais filtrer une vue et je voulais montrer les options précédemment sélectionnées.En soumettant le formulaire I construit une chaîne de requête dans le soumettre crochet:

function myform_submit($form, &$form_state) { 

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

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

Dans le crochet de construction de forme, tout ce que je faisais était obtenir la chaîne de requête en cours et utilisé ceux comme valeurs par défaut, comme ceci:

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