1

私は現在、メニューの簡単なアクセス制御を可能にする、構築中の新しいモジュールに単純な 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」で指定したファイルを含むディレクトリへのパス。これは、フックを実装するモジュールへのパスにデフォルト設定されます。

どうすればこれを機能させることができますか?

4

1 に答える 1

4

ファイル パスを明示的に drupal_get_path('module', 'yourmodule') に設定できます。これがデフォルトですが、デフォルトは hook_menu_alter() が呼び出される前に設定されます。

問題は、なぜ hook_menu() の代わりに hook_menu_alter() で新しいメニュー項目を定義するのかということです。変更フックは、新しいモジュールを追加するのではなく、他のモジュールの既存のフックを変更することになっています。

于 2011-02-21T04:45:36.020 に答える