Drupal: форма полного цикла с параметрами и страницей ответов - PullRequest
0 голосов
/ 05 июля 2010

Я пытаюсь сделать форму полного цикла с параметрами и страницей ответов.Форма работает нормально, но страница ответа становится черной.У любого есть предложение или пример модели.

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 ]

2 голосов
/ 05 июля 2010

Вам следует немного изменить перенаправление:

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

Это будет соответствовать двум % в вашем URL, так как 0 равно 'my_module-99-response'.

0 голосов
/ 05 июля 2010
$form_state['redirect'] = array("my_module-99-response/$param_a/$param_b");

это прекрасно работает, за исключением drupal искажает слеш с кодировкой

0 голосов
/ 05 июля 2010

Я не знаю, поможет ли это, но стандартным методом является использование drupal_get_form в меню ловушек с идентификатором формы в качестве параметра.Я не уверен, что вы пытаетесь сделать с аргументами?

$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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...