Вы не можете динамически изменять путь к пункту меню, потому что пункты меню кэшируются.
Тем не менее, AFAIK, есть два способа получить то, что вы хотите. Оба метода требуют, чтобы вы создали пункты меню с помощью hook_menu в пользовательском модуле (не из пользовательского интерфейса меню).
Первый способ - создать два пункта меню с одинаковыми именами и установить правила доступа так, чтобы один был доступен только для зарегистрированных гостей, а другой - для аутентифицированных пользователей. Поскольку Drupal будет отображать только те пункты меню, к которым пользователь имеет доступ, в любой момент времени будет отображаться только один. В ядре Drupal вы можете увидеть, как пользовательский модуль создает пункт меню для анонимных пользователей, посмотрев путь /user/login
в user_menu () .
Второй метод заключается в создании отдельного пункта меню и проверке в меню обратного вызова, если пользователь вошел в систему. Если пользователь вошел в систему, вы обслуживаете одну страницу, если не обслуживаете другую. В ядре Drupal путь /user
работает следующим образом. См. user_page , чтобы увидеть, как работает код.