Показывать пункты меню с ограниченным доступом для анонимных пользователей

9

У меня есть веб-сайт, который использует приватный модуль для настройки доступа к контенту, и, конечно, некоторые из моих страниц имеют пункты меню. Теперь, если я настрою страницу как частную, это смогут увидеть только пользователи с соответствующими правами, что здорово, и я этого хотел.

Но у меня есть небольшая проблема с пунктами меню, они исчезают, если назначенный им контент не является общедоступным (т. Е. Назначенная им страница является Личной), это нормально, но я хотел бы иметь возможность показывать эти пункты по-прежнему в навигации, поэтому, если пользователь нажимает на них, он переходит на страницу входа в систему с просьбой ввести свои данные, чтобы увидеть эту конкретную страницу.

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

Я нашел это решение, которое не является лучшим для меня, так как у меня много таких страниц, поэтому я ищу лучший подход. Я даже попробовал модуль видимости пункта меню, но это тоже не помогло!

Как мне добиться этого, пожалуйста?

Лука

Лука
источник
У меня есть код на github.com/bbinkovitz/derpl/tree/master/foreshadow_menu, который может быть полезен для вас. Вам, вероятно, придется изменить некоторые значения или назвать свои меню так же, как я, но это может помочь вам начать.
Бэт

Ответы:

4

Ваша проблема довольно распространенная.

Вот обсуждение того, как реализовать такой трюк в Drupal 6 и 7 и 8: http://drupal.org/node/300607

Drupal 6 (и 7) убрал возможность отображать пункты меню, к которым у пользователя нет доступа. Однако в некоторых случаях желательно показать пункт меню, даже если пользователь не имеет доступа к пункту меню. Например, если вы используете механизм аутентификации, который пытается получить аутентификацию, когда будет отображаться 403, вы все равно хотите отобразить пункт меню, чтобы пользователи могли предоставить учетные данные для входа в систему.

Решение для Drupal 7 можно найти здесь: http://drupal.org/node/300607#comment-4450062

Если вы предпочитаете готовый модуль - вы можете скачать его здесь https://github.com/systemseed/always_visible

Евгений Фиделин
источник
Большое спасибо. Жаль, что у них не было этой опции, встроенной в Drupal
Luca
1

У меня была похожая ситуация, когда страницы должны были отображаться в системе меню, но содержимое должно отображаться только зарегистрированным пользователям. Окончательное решение было очень простым и продолжает работать.

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

Они не перенаправляются автоматически, поэтому, если это критично, это не решение проблемы.

Код в двух словах:

<?php  
global $user;       
if ( $user->uid ) :
print render($content);
// or in some situations, display a view;
else : 
print 'Please <a href="https://drupal.stackexchange.com/user/login">log in</a> or <a href="https://drupal.stackexchange.com/user/register">register</a> etc etc.'
endif; 
?>
Keva
источник
Спасибо, но это не было бы хорошим решением по многим причинам. Я использую другой тип системы шаблонов, и я хочу иметь доступ к контенту, поэтому при выводе контента, т. Е. В представлениях, это будет уважать доступ.
Лука
о да. Я надеюсь, что вы найдете ответ. Кажется, это был бы довольно распространенный вариант использования.
Кева