2010-07-05 5 views
0

J'essaie de créer un cycle complet avec paramètres et page de réponse. Le formulaire fonctionne correctement, mais la page de réponse est noire. N'importe qui a une suggestion ou un exemple de modèle.Drupal: formulaire de cycle complet avec paramètres et page de réponse

function module99_menu(){ 
    $items = array(); 

    // inital form 
    $items['module-99'] = array(
     'title'   => t('Export'),  // Page title 
     'page callback' => 'fn_module99',  // function to call when this page is called 
     'access arguments' => array('access content'), // An array of arguments to pass to the access callback function. 
     'description' => t('Export'), 
     'type' => MENU_CALLBACK, 
    ); 


    // response page 
    $items['my_module-99-response/%/%'] = array(

     'title'   => t('Response Page'),   // Page title 
     'page callback' => 'fn_module99_response',  // function to call when this page is called 
     'page arguments' => array(0,1),     // pass with arg(0) and arg(1) 
     'access arguments' => array('access content'),  
     'description'  => t('Export - response form'), 
     'access callback' => TRUE, 
     'type'    => MENU_CALLBACK, 
    ); 

function fn_module99() { 
    return drupal_get_form('module99_my_form'); 
} 


function module99_my_form_validate($form, &$form_state) { 
    // do some validation 
} 


function module99_my_form_submit($form, &$form_state) { 
    // do some stuff 
    drupal_set_message(t('The form has been submitted.')); 
    $parms = "p1=" . "A" . "&p2=" . "B" ; 
    $form_state['redirect'] = array('my_module-99-response', $parms); 
} 

function fn_module99_response($parm1,$parm2) { 
    $output = $parm1 . $parm2; 
    return $output; 
} 


function module99_my_form($form_state){ 

    $form = array(); 

    $form['email'] = array( 
     '#type' => 'textfield', 
     '#title' => t('E-mail address') , 
     '#size' => 64, 
     '#maxlength' => 64, 
     '#required' => TRUE, 
    ); 

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

    return $form; 
} 

Répondre

0

Je ne sais pas si cela va aider, mais la méthode standard consiste à utiliser drupal_get_form dans le menu crochet avec la forme id du formulaire en tant que paramètre. Je ne suis pas sûr de ce que vous essayez de faire avec les arguments?

$items['my_module-99-response/'] = array(

    'title'   => t('Response Page'),   // Page title 
    'page callback' => 'drupal_get_form',  
    'page arguments' => array('fn_module99_response'),  
    'access arguments' => array('access content'),  
    'description'  => t('Export - response form'), 
    'access callback' => TRUE, 
    'type'    => MENU_CALLBACK, 
); 

Vous devez également spécifier un gestionnaire soumettre sous la forme en utilisant la propriété « #submit » (assurez-vous que vous passez un tableau). Faites la validation de la même manière pendant que vous y êtes.

function module99_my_form($form_state){ 

$form = array(); 

$form['email'] = array( 
    '#type' => 'textfield', 
    '#title' => t('E-mail address') , 
    '#size' => 64, 
    '#maxlength' => 64, 
    '#required' => TRUE, 
); 

$form['submit'] = array( 
    '#type' => 'submit', 
    '#value' => t('Save'), 
); 
$form['#submit'] = array('module99_my_form_submit') ; 
$form['#validate'] = array('module99_my_form_validate') ; 

return $form; 
} 
2

Vous devez changer la redirection un peu:

$form_state['redirect'] = array("my_module-99-response/$param_a/$param_b"); 

également dans votre hook_menu vous voulez modifier les arguments page:

$items['my_module-99-response/%/%'] = array(
    'page arguments' => array(1,2), 
); 

Cela correspondra deux % dans votre URL , comme 0 est 'my_module-99-response'.

0
$form_state['redirect'] = array("my_module-99-response/$param_a/$param_b"); 

Cela fonctionne très bien, sauf les barres obliques Mangles drupal avec le codage