Изменение ссылок меню, если пользователь аутентифицирован или нет - PullRequest
5 голосов
/ 13 июля 2010

Мне нужно изменить ссылки меню на моем веб-сайте (и оставить те же имена элементов) в зависимости от того, является ли пользователь гостем или аутентифицированным пользователем.

Какой стандартный способ сделать это?

спасибо

Ответы [ 4 ]

5 голосов
/ 13 июля 2010

Вы не можете динамически изменять путь к пункту меню, потому что пункты меню кэшируются.

Тем не менее, AFAIK, есть два способа получить то, что вы хотите. Оба метода требуют, чтобы вы создали пункты меню с помощью hook_menu в пользовательском модуле (не из пользовательского интерфейса меню).

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

Второй метод заключается в создании отдельного пункта меню и проверке в меню обратного вызова, если пользователь вошел в систему. Если пользователь вошел в систему, вы обслуживаете одну страницу, если не обслуживаете другую. В ядре Drupal путь /user работает следующим образом. См. user_page , чтобы увидеть, как работает код.

4 голосов
/ 02 июля 2012

Вы можете динамически изменять путь элемента меню - см. hook_translated_menu_link_alter .

Этот хук вызывается перед отображением каждого элемента меню, ЕСЛИ он имеет свойство ['options'] ['alter'] = TRUE.

Вы можете установить это свойство для пунктов меню, используя hook_menu_link_alter .

Пример кода будет:

function MY_MODULE_menu_link_alter(&$item) {
    $item['options']['alter'] = TRUE;
}

function MY_MODULE_translated_menu_link_alter(&$item, $map) {
    if($item['mlid']==89) {
        $item['link_path'] .= 'my-new-path';
    }
}
2 голосов
/ 13 июля 2010

Вместо изменения ссылки вы можете создавать меню дважды: один раз со ссылками для обычных пользователей и один раз со ссылками для зарегистрированных пользователей / admin / ...

Вы можете поместить меню в блок и настроить его так, чтобы только зарегистрированные пользователи могли видеть один блок, а незарегистрированные пользователи - другой блок. Либо, выбрав соответствующий переключатель в меню Drupal в форме создания блока, либо через PHP, который будет оценивать и отображать его в зависимости от возвращаемого значения (TRUE / FALSE). Я предлагаю пойти с первого подхода.

0 голосов
/ 06 июня 2012

Вы можете изменить меню, используя комбинацию модуля nodeaccess и ссылки на соответствующие страницы.

Например, по умолчанию гостевые пользователи не могут получить доступ / выйти из системы.Если вы создадите ссылку в меню для выхода из системы, она будет отображаться только в том случае, если пользователь вошел в систему. С помощью nodeaccess просто создайте узел, перейдите на вкладку предоставления и снимите флажок с «аутентифицированных пользователей» или «анонимных пользователей» для этого узла.

http://drupal.org/project/nodeaccess

Приветствия,

...