Drupal 8 - показывать блок с меню только на тех страницах, которые есть в этом меню

Категория: Drupal
Дата публикации: 26 июля, 2020 - 12:38
Последнее изменение: 26 июля, 2020 - 12:38

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

function MODULE_block_access(Block $block, $operation, AccountInterface $account){

  if ($operation == 'view'){
    if($block->id() == 'BLOCK-ID'){
      $path = \Drupal::service('path.current')->getPath();
      $alias = \Drupal::service('path.alias_manager')->getAliasByPath($path);

      $storage = \Drupal::entityManager()->getStorage('menu_link_content');
      $menu_links = $storage->loadByProperties(['menu_name' => 'MENU-NAME']);

      if($menu_links){
        $menu_items = [];
        foreach($menu_links as $item){
          $menu_items[] = $item->getUrlObject()->toString();
        }

        if(!in_array($alias, $menu_items)){
          return AccessResult::forbiddenIf(true)->addCacheableDependency($block);
        }
      }
    }
  }

}

Используемые материалы:
https://www.examtray.com/tutorials/how-show-or-hide-block-visibility-dru...
https://drupal.stackexchange.com/questions/247625/how-do-i-retrieve-a-me...

Добавить комментарий