繁体   English   中英

自定义Drupal搜索模块的表单在提交时会丢失所有帖子数据

[英]custom drupal search module's form losing all post data when submitted

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

我已经对该模块进行了一些修改,以处理所有搜索过滤器。

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

问题是,当我提交表单时,我发现我丢失了该提交中的所有帖子数据,因为某个地方,而且我不知道在哪里,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阻止并推出搜索结果。

但这不是发生的事情...从我提交表单并获得结果和主题的某个地方开始,我就被重定向到某些方式,并丢失了所有我的帖子数据。

如果有人可以帮助我,那会让我很高兴。

drupal_get_form实际上消除了$ _POST数组,因此这就是我丢失所有发布数据的原因。

据此: http : //drupal.org/node/748830 $ _POST在使用drupal时确实应该被忽略。 最好找到一种使用它的方法。 一种方法是链接中描述的方法,使您的表单数据使用$ _SESSION数组保留。 我敢肯定还有其他更好的方法可以做到这一点,但是是的,drupal_get_form是这里的罪魁祸首...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM