我正在修改已经提交的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(www.mysite.com/search/inline_ajax_search),然后我们通过相同的函数调用,但我们现在有$ _POST数组中的数据,其中一个确实是$ _POST ['form_id']这是“inline_ajax_search_search_form”形式的名称。所以我们应该能够进入if块并输出搜索结果。
但这不是发生的事情...从我提交表单并获得我的结果和主题的某个地方,我得到了重新定向的一些方法并丢失了我的所有帖子数据。
如果有人可以帮助我,那会让我很开心哈哈。
答案 0 :(得分:0)
drupal_get_form实际上消灭了$ _POST数组,这就是为什么我丢失了所有的帖子数据。
根据这个:http://drupal.org/node/748830当在drupal中做事时,应该忽略$ _POST。最好找到一种方法来使用它。一种方法是链接中描述的方式,使用$ _SESSION数组使ur表单数据保持不变。我确信还有其他更好的方法可以做到这一点,但是,drupal_get_form是罪魁祸首......