Drupal is a registered trademark of Dries Buytaert
drupal 11.3.7 Update released for Drupal core (11.3.7)! drupal 11.2.11 Update released for Drupal core (11.2.11)! drupal 10.6.7 Update released for Drupal core (10.6.7)! drupal 10.5.9 Update released for Drupal core (10.5.9)! cms 2.1.1 Update released for Drupal core (2.1.1)! drupal 11.3.6 Update released for Drupal core (11.3.6)! drupal 10.6.6 Update released for Drupal core (10.6.6)! cms 2.1.0 Update released for Drupal core (2.1.0)! bootstrap 8.x-3.40 Minor update available for theme bootstrap (8.x-3.40). menu_link_attributes 8.x-1.7 Minor update available for module menu_link_attributes (8.x-1.7). eca 3.1.1 Minor update available for module eca (3.1.1). layout_paragraphs 2.1.3 Minor update available for module layout_paragraphs (2.1.3). ai 1.3.3 Minor update available for module ai (1.3.3). ai 1.2.14 Minor update available for module ai (1.2.14). node_revision_delete 2.0.3 Minor update available for module node_revision_delete (2.0.3). moderated_content_bulk_publish 2.0.52 Minor update available for module moderated_content_bulk_publish (2.0.52). klaro 3.0.10 Minor update available for module klaro (3.0.10). klaro 3.0.9 Minor update available for module klaro (3.0.9). layout_paragraphs 2.1.2 Minor update available for module layout_paragraphs (2.1.2). geofield_map 11.1.8 Minor update available for module geofield_map (11.1.8).

twig_capture

73 sites Security covered
View on drupal.org

Enabling this module has no visible effect whatsoever to end users and even developers need to read the compiled twig files to see any changes so almost always it is completely invisible. It is, however a bugfix to a common bug and a potential performance boost.

The bug is in a common pattern used to check whether a render array is empty followed by printing the variable (#327 and #333 in this core issue):

{% if content.body | render %}
<div>
{{ content.body }}
</div>
{% endif %}

TLDR for the rest: this code can be kept like as is despite it has a bug and this module automatically fixes the bug.

This code will render content.body twice any time it is not empty -- that's the bug. Most of the time this bug avoids detection because it's merely a performance hit. However, if it hits a form (for example a webform) that form will double submit. Any number of subtler issues might occur because of the unexpected double rendering -- for example if a form has an id "foo" then the expectation is <form id="foo"> but <form id="foo--1"> will appear instead. When the form is rendered first, Drupal will think the HTML ID "foo" is used and won't realize the {% if %} throws this HTML away and so it assigns a unique ID to the form when it is rendered the second time.

The recommended bugfix is something like:

{% set body_rendered = content.body | render %}
{% if  body_rendered %}
<div>
{{ body_rendered }}
</div>
{% endif %}

Writing this manually every time an empty check is followed by a print is extremely tedious and bug prone. The module does this conversion automatically: it captures the result of the render filter in a variable and if the same thing is later printed then it prints the variable containing the capture instead.

Activity

Total releases
1
First release
Feb 2025
Latest release
1 year ago
Release cadence
Stability
100% stable

Releases

Version Type Release date
1.0.3 Stable Feb 19, 2025