emulsify icon indicating copy to clipboard operation
emulsify copied to clipboard

twig function bem() removes attributes of parent twig file

Open ndf opened this issue 4 years ago • 2 comments

What you did:

We have a hierarchy of templates.

  1. In side the top-template (in our case webform.html.twig) we call the child template with an include like this {% include "@atoms/02-text/00-headings/_heading.twig".
  2. Inside the child template function bem() is called: {{ bem(heading_base_class, (heading_modifiers), heading_blockname) }}
  3. Further down in the parent template, after the include, {{attributes}} is rendered. In this case it must print the form attributes like id, class, but also form-specific attributes like method and action.

What happened: The function bem() in bem.function.php removes/resets the attribute function in the following block of code:

// Remove the attribute from context so it doesn't trickle down to
// includes.
$context['attributes']->removeAttribute($key);

The effect is that {{attributes}} is empty. If I uncomment above, then bem() prints the attributes of the webform in the _heading.twig. Also not good. But the good part is that the webform itself can print its attributes. (In this example the attribute-list is printed 2 times in the webform and the heading template).

Reproduction repository (if necessary):

Problem description: How can this problem be avoided?

Suggested solution: Either that the bem() function resolves this automatically, or by adding some documentation how the bem() function must be called to avoid this problem.

ndf avatar Nov 15 '21 12:11 ndf

Thanks for opening your first issue here! Be sure to follow the issue template!

welcome[bot] avatar Nov 15 '21 12:11 welcome[bot]

@callinmullaney I wonder if this is related to the issue with views you mentioned you were working on

ModulesUnraveled avatar Nov 15 '21 13:11 ModulesUnraveled