fourkitchens / emulsify

DEPRECATED (see README for new version)
GNU General Public License v2.0
162 stars 70 forks source link

twig function bem() removes attributes of parent twig file #370

Open ndf opened 3 years ago

ndf commented 3 years ago

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.

welcome[bot] commented 3 years ago

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

ModulesUnraveled commented 3 years ago

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