drupal menu_alter ищет файл включения в неправильном месте - PullRequest
1 голос
/ 21 февраля 2011

В настоящее время у меня есть простой хук 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 Ответ

4 голосов
/ 21 февраля 2011

Вы можете явно указать путь к файлу drupal_get_path ('module', 'yourmodule').Это значение по умолчанию, но оно устанавливается до вызова hook_menu_alter ().

Вопрос в том, почему вы определяете новый пункт меню в hook_menu_ alter () вместо hook_menu ().Предполагается, что alter hook изменяет существующие хуки других модулей, а не добавляет новые.

...