Drupal:带参数和响应页面的完整循环形式

时间:2010-07-05 12:16:00

标签: validation drupal forms parameters

我正在尝试使用参数和响应页面创建一个完整的循环形式。表格工作正常,但响应页面黑了。任何人都有建议或模型示例。

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

3 个答案:

答案 0 :(得分:2)

您应该稍微更改重定向:

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

同样在你的hook_menu中你想要更改页面参数:

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

这将匹配您网址中的两个%,因为0为'my_module-99-response'

答案 1 :(得分:0)

我不知道它是否会有所帮助,但标准方法是在钩子菜单上使用drupal_get_form,并将表单的表单id作为参数。我不确定你要对这些论点做些什么?

$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,
);

您还应该使用“#submit”属性在表单中指定提交处理程序(确保传递数组)。在你做的时候以相同的方式进行验证。

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 :(得分:0)

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

这很有效,除了drupal用编码

修改斜杠