PROBLEM
This is a strange one but one that’s been talked about many, many times in Drupal 8. In Drupal 8, if you check to see if a region is empty, it isn’t empty. You need to do a few things to adequately determine if a region is truly empty.
See these:
https://www.drupal.org/node/953034
https://www.drupal.org/forum/support/module-development-and-code-questions/2016-04-07/drupal-8-regions-with-and-empty
https://drupal.stackexchange.com/questions/175389/how-do-i-properly-detect-if-region-is-empty
So, I would like to determine if a block is empty before I display it so I can put a Bootstrap wrapper around it. However, just using:
{% if page.left_sidebar %} <div class="left_sidebar">{{ page.left_sidebar }}</div> {% endif %}
won’t work. To give some background, the region on most pages has a secondary menu (a left navigation). However, on pages where this doesn’t display, it would display an empty region even though there was no menu there.
SOLUTION
At first I did:
{% if page.left_sidebar|render|striptags|trim %} <div class="left_sidebar">{{ page.left_sidebar }}</div> {% endif %}
and this seemed to work! However, today, when I got to putting a webform in a region, it didn’t work. Striptags for some reason took out everything. Come to find out Webforms use some sort of “lazyBuilding” or something I don’t give a shit about. #stupidShit
Anyway, now my code above doesn’t work. But buried deep in one of those links above is this gem:
{% if page.left_sidebar|render|striptags("<drupal-render-placeholder>")|trim %} <div class="left_sidebar">{{ page.left_sidebar }}</div> {% endif %}
This seems to work for the moment. If this turns out to not work later (which it might not for other needs… or in like 10 minutes when I find another issue), I will re-evaluate.
Until this will hopefully be solved in core one day, there is now a workaround module at https://www.drupal.org/project/twig_real_content
Please help to test and improve it and provide feedback in issues. 🙂