2

I need to alter all the blocks of custom type 'my_custom_block_type' that get displayed on my site. In order to achieve this, i added a custom prerender in which i filter on the block bundle :

function my_module_block_view_alter(array &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
  $build['#pre_render'][] = '_custom_block_custom_prerender';
}

function _custom_block_custom_prerender(array $build) {
  if ($build['content']['#block_content']) {
    $block_bundle = $build['content']['#block_content']->bundle();

    if ($build['content']['#block_content']->bundle() === 'my_custom_block_type') {
      // do your thing here
    }
  }
  return $build;
}

I think it's not the most elegant way to do this.

I tried to enhance this, but i did not manage, after several attempts, to retrieve the block type directly inside a hook_block_view_alter or a hook_block_build_alter ...

function hook_block_view_alter(array &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
  // things
}
function hook_block_build_alter(array &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
  // stuff
}

Is there a way to easily get the custom block type inside those two hooks ?

3
  • Try hook_block_content_view()/view_alter(), that gives you the block_content entity as an argument, just like hook_node_view(). Depends on what you need to do
    – Berdir
    Feb 21, 2017 at 12:15
  • thanks @Berdir, hook_ENTITY_TYPE_view did the trick and is more straightforward.
    – tYba
    Feb 21, 2017 at 13:15
  • Hey, could you move the solution into a desired answer and mark that as accepted?
    – leymannx
    Feb 21, 2017 at 14:05

1 Answer 1

2

Try hook_ENTITY_TYPE_view()/hook_ENTITY_TYPE_view_alter(), that gives you the block_content $entity as an argument, just like hook_node_view().

2
  • @leymannx Thanks for improving, but as I commented, you should then actually use $entity and you can also type hint it on BlockContentInterface to get more specific method autocomplete.
    – Berdir
    Feb 21, 2017 at 15:47
  • I see! Removed OP's code.
    – leymannx
    Feb 21, 2017 at 15:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.