views:

22

answers:

3

I am trying to make a full cycle form with parameters and response page. Form is working OK, but response page is coming up black. Anyone have a suggestion or model example.

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

I don't know if it will help, but the standard method is to use drupal_get_form on the hook menu with the form id of the form as a parameter. I'm not sure what you are trying to do with the 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,
);

You should also specify a submit handler in the form using the '#submit' property (make sure you pass an array). Do validation in the same way while you are at it.

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;
}
Jeremy French
+2  A: 

You should change the redirect a bit:

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

Also in your hook_menu you want to change the page arguments:

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

This will match the two % in your url, as 0 is 'my_module-99-response'.

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

this works great except drupal mangles the slashes with encoding

ernie