настраиваемая форма модуля поиска drupal, теряющая все данные поста при отправке - PullRequest
0 голосов
/ 14 сентября 2010

Я изменяю уже добавленный модуль drupal (Inline Ajax Search) для обработки поиска определенного типа контента с помощью некоторых поисковых фильтров (т. Е. При поиске справочной документации вы отфильтровываете результаты поиска, выбирая, для какого продукта и версии) продукт, с которым вы хотите помочь).

Я немного изменил модуль, чтобы обрабатывать все поисковые фильтры.

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

Проблема в том, что когда я отправляю форму, я обнаружил, что потерял все свои данные поста в этой отправке, потому что где-то, и я не знаю, где drupal либо перенаправляет меня, либо происходит что-то еще, что заставляя меня потерять все в массиве $ _POST.

вот реализация hook_menu ():

<?php  
function inline_ajax_search_menu() {
    $items = array();
    $items['search/inline_ajax_search'] = array(  
        'title' => t('Learning Center Search'),
        'description' => t(''),
        'page callback' => 'inline_ajax_search_view',
        'access arguments' => array('search with inline_ajax_search'),
        'type' => MENU_LOCAL_TASK,
        'file' => 'inline_ajax_search.pages.inc',
    );
}
?>

обратный вызов страницы определяется как таковой (очень похоже на функцию search_view основного поискового модуля):

<?php  
function inline_ajax_search_view() {

    drupal_add_css(drupal_get_path('module', 'inline_ajax_search') . '/css/inline_ajax_search.css', 'module', 'all', FALSE );

    if (isset($_POST['form_id'])) {
        $keys = $_POST['keys'];

        // Only perform search if there is non-whitespace search term:
        $results = '';
        if(trim($keys)) {     
            require_once( drupal_get_path( 'module', 'inline_ajax_search' ) . '/includes/inline_ajax_search.inc' );

            // Collect the search results:
            $results = _inline_ajax_search($keys, inline_ajax_search_get_filters(), "page" );



            if ($results) { 
                $results = theme('box', t('Search results'), $results);
            }
            else {
                $results = theme('box', t('Your search yielded no results'), inline_ajax_search_help('inline_ajax_search#noresults', drupal_help_arg()));
            }
        }
        // Construct the search form.
        $output = drupal_get_form('inline_ajax_search_search_form', inline_ajax_search_build_filters( variable_get( 'inline_ajax_search_filters', array() ) ) );
        $output .= $results;

        return $output;
    }
  return drupal_get_form('inline_ajax_search_search_form', inline_ajax_search_build_filters( variable_get( 'inline_ajax_search_filters', array() ) ) );
}
?>

Насколько я понимаю, все должно работать следующим образом: пользователь заходит на www.mysite.com/search/inline_ajax_search, а drupal обработает путь, указанный в моем URL, и предоставит мне страницу с тематической формой для моего поиска. модуль. Когда я отправляю форму, действие которой совпадает с URL-адресом (www.mysite.com/search/inline_ajax_search), мы выполняем те же самые вызовы функций, но теперь у нас есть данные в массиве $ _POST, и один из них действительно равен $ _POST ['form_id'], который является именем формы "inline_ajax_search_search_form". поэтому мы должны иметь возможность войти в блок if и выдать результаты поиска.

но это не то, что происходит ... где-то, когда я отправляю форму и получаю свои результаты и настраиваю все это, я получаю перенаправление, как и теряю все свои почтовые данные.

если кто-нибудь сможет мне помочь, это сделает меня таким счастливым, лол.

1 Ответ

0 голосов
/ 15 сентября 2010

drupal_get_form фактически стирает массив $ _POST, поэтому я теряю все свои данные постов.

в соответствии с этим: http://drupal.org/node/748830 $ _POST действительно следует игнорировать при выполнении действий в drupal.Лучше найти способ использовать его.Одним из способов является способ, описанный в ссылке, при котором данные формы сохраняются с использованием массива $ _SESSION.Я уверен, что есть другие и лучшие способы сделать это, но да, drupal_get_form был виновником здесь ...

...