W Drupal 6 mogłem kontrolować widoczność bloku za pomocą kodu PHP w konfiguracji interfejsu bloku, takiego jak:
<?php return MYMODULE_abc() || MYMODULE_def() ; ?>
Funkcje te sprawdzały bieżący węzeł, systematykę itp., Aby zdecydować, czy wyświetlić blok. Ta opcja PHP zniknęła w Drupal 8, ale jest $visibility
pole w BlockBase
. Czy mogę tego użyć, aby programowo ustawić widoczność w czasie wykonywania?
Odpowiedzi:
Działający fragment kodu, jak go używać
hook_block_access()
. Tutaj pobieram warunek z pola bieżącego węzła:Dzięki @Insasse za udostępnienie następującego klejnotu w komentarzach. W przypadku bloków niestandardowych utworzonych programowo można kontrolować widoczność bezpośrednio z klasy bloków poprzez
blockAccess()
:Źródło: Jak programowo utworzyć blok w Drupal 8
źródło
Brak filtru php w Drupal 8 nie będzie już możliwy z poziomu interfejsu użytkownika.
Jedyną opcją jest użycie interfejsu API bloku.
hook_block_access jest twoim najlepszym kandydatem. Stamtąd możesz sprawdzić
$operation
i zwrócić AccessResult na podstawie twoich warunków.Tak jak w interfejsie użytkownika, tylko tym razem umieszczając php w module.
źródło
Oto rozwiązanie Drupal 8: Blokuj wykluczanie stron .
źródło
W wersji 8.2.x należy utworzyć wtyczkę Condition i zaimplementować interfejs ContextProviderInterface .
Zobacz przykład z DO, ale jest on w pewnym stopniu nieaktualny (ponieważ BlockEvent i BlockSubscriberBase zostały usunięte na rzecz usługi kontekstowego repozytorium).
Przydałoby się również użyć konsoli Drupal do wygenerowania wtyczki:
źródło
aby rozszerzyć możliwości widoczności bloku, możesz wypróbować tę łatkę:
https://www.drupal.org/project/drupal/issues/923934#comment-12401360
wprowadza operator koniunkcji AND / OR dla warunków widoczności, więc możesz powiedzieć, och, chcę, aby ten blok był widoczny, jeśli jest typu mój_koncepcja LUB użytkownik ma rolę administratora LUB adres URL zaczyna się od mojej / ścieżki / do / * itd. również warunków można to zanegować, dzięki czemu możesz ustawić wiele warunków, w których nie chcesz, aby blok był widoczny
także jeśli korzystasz z modułu Drupal Commerce, możesz wypróbować powyższe, instalując https://www.drupal.org/project/commerce_quick_purchase moduł, że zainstalowanie modułu ujawnia tę funkcjonalność dla wszystkich bloków w systemie, nawet jeśli nie „ t użyć bloku dostarczonego przez moduł zobacz więcej
https://github.com/drugan/commerce_quick_purchase#block-visibility
dodatkowo możesz stworzyć własną wtyczkę warunkową, patrz przykład z modułu
https://cgit.drupalcode.org/commerce_quick_purchase/tree/src/Plugin/Condition
źródło