drupal menu_alter在错误的地方寻找包含文件

时间:2011-02-21 01:15:19

标签: drupal drupal-6 drupal-modules drupal-hooks

我目前在我正在构建的新模块中有一个简单的menu_alter挂钩,它允许对菜单进行简单的访问控制:

<?php 

function amh_menu_menu_alter(&$items)
{
    $items['admin/build/menu/access'] = array(
    'title' => 'Access',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('amh_menu_access_configure'),
    'access arguments' => array('administer menu'),
    'type' => MENU_LOCAL_TASK,
    'weight' => 5,
    'file' => 'amh_menu.admin.inc',
  );
}

但是,加载页面时出现以下错误:

[Mon Feb 21 11:25:15 2011] [error] [client 10.2.2.106] PHP Fatal error:  require_once(): 
Failed opening required '/amh_menu.admin.inc' 
(include_path='.:/usr/share/php:/usr/share/pear') 
in /var/www/shop.dev.amh/www/includes/menu.inc on line 346, 
referer: http://shop.dev.amh/admin/build/menu

查看其他具有menu和menu_alter挂钩的模块,它们都在地方引用本地module.admin.inc,它们没有这个问题,似乎没有指定任何额外的路径。

确实 - 菜单挂钩的文档说“文件路径”菜单项参数是

  

包含目录的路径   “file”中指定的文件。这个   默认为模块的路径   实施钩子。

我如何使这项工作?

1 个答案:

答案 0 :(得分:4)

您可以将文件路径显式设置为drupal_get_path('module','yourmodule')。这是默认值,但默认值是在调用hook_menu_alter()之前设置的。

问题是,为什么要在hook_menu_ alter ()中定义 new 菜单项而不是hook_menu()。 alter hook应该改变其他模块的现有钩子,而不是添加新的钩子。