Drupal 7自定义模块错误

时间:2011-03-08 23:50:50

标签: drupal drupal-7

我正在使用Drupal中的自定义模块,但它给了我以下两个警告:

Warning: Invalid argument supplied for foreach() in menu_unserialize() (line 377 of /site/includes/menu.inc).
Warning: Invalid argument supplied for foreach() in menu_unserialize() (line 377 of /site/includes/menu.inc).

这是模块的代码:

<?php

function homepage_coords_menu(){
return array(//$items
    'homepage_coords/%node/%/%' => array(
        'page callback' => 'homepage_coords_ajax_callback',
        'page arguments' => array(1,2,3),
        'access arguments' => TRUE,
        'type' => MENU_CALLBACK,
    )
);
}

function homepage_coords_ajax_callback($nid=0,$x=0,$y=0){
    return 'nid:'.$nid.' x:'.$x.' y:'.$y;
}

?>

我该怎么做才能修复这些警告?

此外,任何有效的改进都将受到赞赏:)

5 个答案:

答案 0 :(得分:21)

  • 要允许所有人访问,您需要将“访问回调”设置为TRUE,而不是“访问参数”。另外,您确定没有该页面的访问定义吗?

  • 您的编码风格不典型,当您习惯默认的方式时,这很难理解。有关示例,请参阅node_menu()。我最初以为你是用老式的Drupal 5方式做的。

  • 看起来第一个参数是一个节点,我建议你使用%node,然后菜单系统会自动加载节点,如果参数是有效的节点id,则只调用你的页面回调。键看起来像这样:“homepage_cords /%node /%/%".

答案 1 :(得分:6)

我遇到了这个错误,因为我将字符串传递给“页面参数”而不是数组。

$ items ['page arguments'] = array('module_my_form');

答案 2 :(得分:3)

我浪费了太多时间试图调试这个...当简单的回答是写的:

...
    'access arguments' => TRUE,
...

当我应该写的是:

....
    'access callback' => TRUE,
....

答案 3 :(得分:0)

我相信你只需要像这样制作“$ items”数组:

function homepage_coords_menu(){
    $items['homepage_coords/%/%/%'] = array(
        'page callback' => 'homepage_coords_ajax_callback',
        'page arguments' => array(1,2,3),
        'access arguments' => TRUE,
        'type' => MENU_CALLBACK,
    );
    return $items;
}

答案 4 :(得分:0)

最终很奇怪,但这很有效 'access arguments'=&gt;阵列(TRUE)

似乎访问参数键需要以数组('')格式返回的值。

之前只添加:“'访问参数'=&gt; TRUE,”为我工作!!! 仍然试图找到这种奇怪行为背后的原因 张贴以防万一它可以帮助某人。