Как я могу отправить свою форму Drupal на любую другую внутреннюю страницу? - PullRequest
0 голосов
/ 20 октября 2010

У меня проблема с формами Drupal. Не могу придумать, как ее решить, и мне было интересно, есть ли у моего мозга решение моей проблемы.

У меня есть эта форма:

<?php
function mymodule_myform(){
  $form['#action'] = url('search/cards');
  $form['whatwhere']['what'] = array(
    '#type' => 'textfield',
    '#title' => t('What?'),
    '#maxlength' => 80,
    '#required' => TRUE,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Search'),
  );
}
?>

Который, как вы можете видеть, должен предоставить всю информацию www.example.com/search/cards. Это действительно отправит мою форму на желаемый URL. Однако, без хука mymodule_menu(), определяющего путь, он закончится 404.

Итак, я добавляю:

<?php
function mymodule_menu(){
  $items['search/%'] = array(
    'title'  => t('Search Results'),
    'page callback' => 'mymodule_main',
    'access arguments' => array('access content'),
    'file' => 'mymodule.inc',
    );
}
?>

И в mymodule.inc файле я создам свою функцию mymodule_main():

<?php
function mymodule_main(){
  print_r($_POST);
  die(); // ### Note the die(); ###

  return 'Just searched: '. $_POST['what'];
}
?>

Если я оставлю это в точности так, как есть, то, конечно, PHP завершит выполнение скрипта сразу после вывода на экран информации о моей форме. Все хорошо!

Однако, если я удаляю die(), кажется, что функция вызывается дважды, и во втором вызове больше не заполняется $ _POST. Кажется, mymodule_menu() переопределяет каким-то образом независимо от того, что делает обработчик отправки формы ...

Вопрос: Как я могу отправить свою форму на любую другую внутреннюю страницу без 404 и сохранить информацию о форме?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 20 октября 2010

Я думаю, вам нужно использовать метод, описанный в http://api.drupal.org/api/function/search_box_form_submit/6


function MODULE_block_form_submit($form, &$form_state)  
{  
    if (isset($_REQUEST['destination'])) {  
        unset($_REQUEST['destination']);  
    }

    if (isset($_REQUEST['edit']['destination'])) {  
        unset($_REQUEST['edit']['destination']);  
    }  

    $form_state['redirect'] = 'search/cards/'. trim($form_state['values']['whatwhere']);  
}
0 голосов
/ 21 октября 2010

После некоторой дискуссии на форумах drupal (, за которой можно следовать ), делается вывод: невозможно получить результаты обработки обратных вызовов меню.Вместо этого вы можете использовать обработчик отправки формы (как всегда), а затем перенаправить на ваш обратный вызов меню.Это не POST к обратному вызову меню, но это так же хорошо, как и получается.

Спасибо за вашу помощь.

0 голосов
/ 20 октября 2010

Я точно не знаю, но, возможно, ваш код конфликтует со встроенным поисковым модулем drupal?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...