Drupal菜单参数的灵活性

时间:2012-03-01 13:00:59

标签: ajax drupal drupal-7 drupal-navigation

我正在使用hook_menu来设置一个链接,我通过JAXERY从一个AJAX应用程序调用它。 我的钩子实现如下:

function staff_filter_menu(){
$items = array();
$items['staff/filtering/results/%'] = array(
    'page callback' => 'staff_filter_function',
    'page arguments' => array(3),
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
    'delivery callback' => 'staff_filter_deliver',
);
return $items;

}

这个链接是我的ajax应用程序的联系点,这是一个简单的文本字段,用户输入一些输入。 * staff_filter_function *搜索数据库并返回一些匹配的数据。 Ajax代码如下:

$.ajax({
url: Drupal.settings.CALL_BACK + '/' + $(this).val(),
success: function($data){
       .... more stuff done here
    }
});

这一切都很好,但只有一个小细节。 我想允许一个允许显示所有结果的快捷方式。此快捷方式只是键入单个空格。 但是,因为hook_menu期望在url的末尾有一个参数,所以每当我输入空格时,我的ajax请求都会失败。当我输入真实内容时,它非常有效。

这只是为了完整性而且很有特色...如果有人可以分享一些想法,我会非常感激。

1 个答案:

答案 0 :(得分:1)

也许您不需要在URL的末尾添加参数。 只需将您的代码更改为以下内容:

function staff_filter_menu(){
$items = array();
$items['staff/filtering/results'] = array(
    'page callback' => 'staff_filter_function',
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
    'delivery callback' => 'staff_filter_deliver',
);
return $items;

并对您的页面回调函数进行轻微更改

function staff_filter_function($my_arg = "")
{
// your code goes here
}

您可以将$ my_arg视为您的网页参数。

希望它有效, 穆罕默德