Drupal 6 не может построить меню роутера и ссылки - PullRequest
2 голосов
/ 09 июня 2010

Когда я включаю новое меню в Drupal (например, mymodule), Drupal должен иметь возможность получать элементы меню из mymodule_menu (hook_menu), обрабатывать элементы и вставлять элементы меню в таблицу menu_router и menu_links.

Однако мой Drupal не может этого сделать.Каждый раз, когда я включаю модуль (написанный мной или модули, предоставленные другими, или основные модули), Drupal, похоже, не получает новую информацию.Пункты меню, определенные во вновь включенном модуле, не обрабатываются и не вставляются в систему меню Drupal.Это означает, что у недавно включенного модуля нет шансов на работу - потому что он недоступен.

Я исправил это, вручную вставив информацию о пункте меню для нового модуля в таблицу menu_router и menu_links, и новое меню начало работать.Но это кошмар, если я должен делать это каждый раз, когда включаю модуль.

У кого-нибудь когда-нибудь возникала такая же проблема?Как это исправить?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 09 июня 2010

Я бы не использовал SQL для взаимодействия с таблицами меню, может произойти что-то неприятное, если вы отредактируете неправильную запись.

В коде hook_menu должна быть ошибкаМожете ли вы вставить его?

Кроме того, если вы разрабатываете модуль, в котором есть пункты меню, я считаю, что удобно добавлять эти две функции в mymodule_init () при добавлении / удалении ссылок:

cache_clear_all()
menu_router_build()

Это очистит весь кэш и перестроит меню и все, что вызывает hook_menu.Если после этого он не появится, значит, в вашем коде есть ошибка.Я бы хотел это увидеть.

0 голосов
/ 17 июня 2010

Вы не сообщили, какую версию Drupal вы используете, но в Drupal 6 реализации hook_menu() не вызываются, если не в некоторых случаях (когда модуль установлен или когда выполняются обновления модулей, впример).

Если ваш модуль изменил обратные вызовы меню, но у него нет обновлений для выполнения, вы можете добавить функцию обновления, содержащую следующий код:

// Change the name of the function to match the module name.
// Change the update number to the correct one for your case.
function custom_module_update_6201() {
  if (!variable_get('menu_rebuild_needed', FALSE)) {
    variable_set('menu_rebuild_needed', TRUE);
  }
}

Переменная проверенаиз index.php, и если его значение равно TRUE, то Drupal автоматически перестроит меню.

...