I have a customer who requires the correct set of responsive classes for his block in a given theme depending on its position and count. In my theme_preprocess_page(&$vars)
I can identify the blocks in this region and build up an array for each block using its plugin_id and save it to $variables['highlighted']
.
In my page.html.twig I use {{ highlighted }}
and the array shows up wonderfully. Because block.html.twig by default is set up to be looking for {{ plugin_id }}
I expected that I can test if plugin_id is in_array()
and add these classes to that instance of the block.
But {{ highlighted }}
in block.html.twig returns null in this theme, suggesting that $variables['page']
works for the page, but not block? Twig has a way to pass off variables to an arbitrary twig file but I do not know how to do this in Drupal. For instance, my page.html.twig is using {{ highlighted }}
to pull in these blocks from $variables
.
So my question is how does Drupal 8’s adaptation the Twig source determine which variables are passed (plugin_id, content, attributes, id, etc) and how I can add mine? I’ve looked through the twig.engine and searched the Twig source, but it’s not clear to me which class controls what variables are passed to blocks? My other avenue is to find a way to pass this array of classes to theme_preprocess_block
but every attempt I made to try this ends up with theme_preprocess_block
returning NULL for this array, suggesting that preprocess_page()
and preprocess_block()
are working separtely.