我正在使用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;
}
?>
我该怎么做才能修复这些警告?
此外,任何有效的改进都将受到赞赏:)
答案 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,”为我工作!!! 仍然试图找到这种奇怪行为背后的原因 张贴以防万一它可以帮助某人。