2010-10-20 3 views
0

У меня проблема с форматами Drupal. Не могу придумать способ его решения, и мне было интересно, есть ли у какого-нибудь мозга решение моей проблемы.Как отправить форму 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 и сохранить информацию о моей форме?

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

ответ

0

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

Благодарим за помощь.

0

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

+0

Nope. Это не тот случай, у меня есть уникальное имя модуля. «Поиск» используется только в этом примере. Спасибо, в любом случае. – acm

1

Я думаю, вам нужно использовать метод, описанный в 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

Привет MPD, как указано в названии, я хочу ПОДПИСАТЬ (используя POST) на другую страницу, а не просто перенаправить со значениями по URL-адресу ... В любом случае, спасибо за вашу помощь. – acm

Смежные вопросы