【问题标题】:drupal menu_alter looking for include file in the wrong placedrupal menu_alter 在错误的地方寻找包含文件
【发布时间】:2011-02-21 01:15:18
【问题描述】:

我目前在我正在构建的一个新模块中有一个简单的 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,并且它们没有这个问题,并且似乎没有指定任何额外的路径。

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

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

我该如何进行这项工作?

【问题讨论】:

  • 你试过设置“文件路径”参数吗?哪个版本的 Drupal?也许这是相关的:drupal.org/node/259133

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


【解决方案1】:

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

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

【讨论】:

  • 有理由在 hook_menu_alter() 中定义新的菜单项,但它们是有意的。也就是说,如果默认行为存在错误,则设置“文件路径”元素是正确的答案。我以前遇到过这个问题。
  • 我使用 hook_menu_alter 是因为我想将本地任务添加到现有菜单结构中,而不是完全替换已经构建的菜单。
  • 按照您的建议指定文件路径可以解决问题 - 谢谢
  • 应该没有什么能阻止您将本地任务添加到由 hook_menu() 中的另一个模块定义的菜单中,您尝试过吗? hook_menu 返回的结构是平面的,然后菜单系统会自行将其移动到正确的位置。您可能缺少其他键,导致通知或类似情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 2020-02-01
相关资源
最近更新 更多