Pokaż pozycje menu z ograniczonym dostępem dla anonimowych użytkowników

9

Mam stronę internetową, która korzysta z modułu prywatnego w celu ustawienia dostępu do treści, i oczywiście niektóre z moich stron zawierają elementy menu. Teraz, jeśli ustawię stronę jako prywatną, tylko użytkownicy z odpowiednimi uprawnieniami mogą to zobaczyć, co jest świetne i czego chciałem.

Ale mam trochę problemów z elementami menu, znikają, jeśli przypisana do nich treść nie jest publiczna (tj. Strona przypisana do nich jest Prywatna), to jest OK, ale chciałbym móc nadal wyświetlać te elementy w nawigacji, więc jeśli użytkownik je kliknie, przeniesie go na stronę logowania z prośbą o podanie swoich danych, aby zobaczyć tę konkretną stronę.

Zasadniczo chciałbym zmienić zachowanie elementów menu w taki sposób, aby zawsze były widoczne dla anonimowych i zarejestrowanych członków strony internetowej, ale kiedy je klikniesz, będziesz mógł zobaczyć stronę (jeśli jesteś zalogowany) in) lub zostać przekierowanym na stronę logowania (jeśli jest anonimowa)

Znalazłem to rozwiązanie, które nie jest dla mnie najlepsze, ponieważ mam wiele takich stron, więc szukam lepszego podejścia. Próbowałem nawet modułu widoczności pozycji menu , ale to też nie pomogło!

Jak mogę to osiągnąć?

Luca

Luca
źródło
Mam kod na github.com/bbinkovitz/derpl/tree/master/foreshadow_menu, który może być dla ciebie pomocny. Prawdopodobnie będziesz musiał zmienić niektóre wartości lub nazwać swoje menu w taki sam sposób, jak ja, ale to może pomóc Ci zacząć.
beth

Odpowiedzi:

4

Twój problem jest dość powszechny.

Oto dyskusja, jak zaimplementować taką sztuczkę w Drupal 6 i 7 i 8: http://drupal.org/node/300607

Drupal 6 (i 7) usunął możliwość wyświetlania elementów menu, do których użytkownik nie ma dostępu. Jednak w niektórych przypadkach pożądane jest wyświetlenie pozycji menu, nawet jeśli użytkownik nie ma dostępu do pozycji menu. Na przykład, jeśli używasz mechanizmu uwierzytelniania, który próbuje uzyskać uwierzytelnienie, gdy zostanie wyświetlony komunikat 403, nadal chcesz wyświetlić element menu, aby użytkownicy mieli szansę podać dane uwierzytelniające do zalogowania.

Rozwiązanie dla Drupal 7 można znaleźć tutaj: http://drupal.org/node/300607#comment-4450062

Jeśli wolisz gotowy moduł - możesz go pobrać tutaj https://github.com/systemseed/always_visible

Eugene Fidelin
źródło
Dziękuję Ci bardzo. Szkoda, że ​​nie mieli tej wbudowanej opcji Drupal
Luca
1

Miałem podobną sytuację, w której strony musiały pojawiać się w systemie menu, ale treść powinna być widoczna tylko dla zalogowanych użytkowników. Ostateczne rozwiązanie było bardzo proste i nadal działa.

Zamiast kontrolować dostęp do treści, szablon węzła sprawdza, czy użytkownik jest zalogowany. Jeśli tak, wyświetla treść. Jeśli nie, pojawi się tekst z linkami do logowania lub rejestracji.

Nie są one automatycznie przekierowywane, więc jeśli jest to krytyczne, to nie jest to rozwiązanie.

Kod w skrócie:

<?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
źródło
Dziękuję, ale nie byłoby to dobre rozwiązanie z wielu powodów, z których korzystam z innego rodzaju systemu szablonów i chcę mieć dostęp do treści, więc przy wyświetlaniu treści, tj. W widokach, które szanują dostęp.
Luca,
o tak. Mam nadzieję, że znajdziesz odpowiedź. Wygląda na to, że byłby to dość powszechny przypadek użycia.
keva