Php 自定义drupal搜索模块的表单在提交时丢失所有post数据

Php 自定义drupal搜索模块的表单在提交时丢失所有post数据,php,forms,post,drupal-6,module,Php,Forms,Post,Drupal 6,Module,我正在修改一个已经提供的drupal模块内联Ajax搜索,以使用一些搜索过滤器处理特定内容类型的搜索,即在搜索帮助文档时,您可以通过选择需要帮助的产品和产品版本来过滤搜索结果 我已经修改了一些模块来处理所有的搜索过滤器 我还从标准核心搜索模块中添加了类似的功能,以处理在实际搜索页面(而不是块表单)上显示搜索表单和搜索结果 问题是,当我提交表单时,我发现我会丢失提交时的所有post数据,因为在某个地方,我不知道在哪里,drupal正在重定向我,或者发生了其他事情,导致我丢失$\u post数组中的

我正在修改一个已经提供的drupal模块内联Ajax搜索,以使用一些搜索过滤器处理特定内容类型的搜索,即在搜索帮助文档时,您可以通过选择需要帮助的产品和产品版本来过滤搜索结果

我已经修改了一些模块来处理所有的搜索过滤器

我还从标准核心搜索模块中添加了类似的功能,以处理在实际搜索页面(而不是块表单)上显示搜索表单和搜索结果

问题是,当我提交表单时,我发现我会丢失提交时的所有post数据,因为在某个地方,我不知道在哪里,drupal正在重定向我,或者发生了其他事情,导致我丢失$\u post数组中的所有内容

以下是钩子菜单的实现:

<?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',
    );
}
?>
页面回调的定义与核心搜索模块的搜索视图函数非常相似:

<?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\u ajax\u search,然后我们进行相同的函数调用,但是现在我们在$\u POST数组中有数据,其中一个确实是$\u POST['form\u id'],这是表单inline\u ajax\u search\u search\u表单的名称。所以我们应该能够进入if块并输出搜索结果

但事实并非如此……从我提交表单、获得结果并将其全部设置为主题时起,我就被重定向了,并丢失了所有的帖子数据


如果有人能帮我的话,我会很高兴的,哈哈。

drupal\u get\u表单实际上抹掉了$\u POST数组,这就是我丢失所有POST数据的原因

根据这一点:$\u在drupal中进行操作时,确实应该忽略POST。最好找到一种方法来使用它。一种方法是链接中描述的方法,使用$\u会话数组使您的表单数据持久化。我相信有很多其他更好的方法可以做到这一点,但是是的,drupal_get_form是罪魁祸首