plugin-drupal-twig-components icon indicating copy to clipboard operation
plugin-drupal-twig-components copied to clipboard

Creates add_attribute twig function

Open waako opened this issue 7 years ago • 6 comments

Replicates the Drupal twig function create_attribute for patternlab https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates#create_attribute

#8 got me thinking about this, so used existing link twig function to make create_attribute work in Pattern Lab. Tested locally with:

<p{{ create_attribute({'class': ['paragraph', 'text']}) }}>{{ content }}</p>

which results in generated html:

<p class="paragraph text">Test paragraph content</p>

waako avatar Mar 19 '18 22:03 waako

Needs improving to work with any attribute though

waako avatar Mar 19 '18 23:03 waako

Function now loops through all the attributes

waako avatar Mar 20 '18 12:03 waako

Hi @waako,

I used the following to rely on Drupal's tools:

<?php
/**
 * @file
 * Add "create_attribute" function for Pattern Lab.
 */

use \Drupal\Core\Template\Attribute;

$function = new Twig_SimpleFunction('create_attribute', function ($attributes = []) {
  return new Attribute($attributes);
});

piouPiouM avatar Jul 04 '18 10:07 piouPiouM

@piouPiouM @waako

We do something virtually identical in our design system in order to make sure all of Drupal’s attributes functionality makes it in there (including the setAttribute, addClass, and removeClass methods, etc)

https://github.com/bolt-design-system/bolt/blob/master/packages/core-php/src/TwigFunctions.php#L240

use \Drupal\Core\Template\Attribute;

//...

// Backport the native create_attribute function from Drupal to natively work in Pattern Lab
  public static function create_attribute() {
    return new Twig_SimpleFunction('create_attribute', function($attributes) {
      return is_array($attributes) ? new Attribute($attributes) : $attributes;
    });
  }

sghoweri avatar Jul 06 '18 23:07 sghoweri

@piouPiouM @sghoweri Thanks, that seems to make sense, did not realise that could use a Drupal class inside patternlab function.

waako avatar Jul 18 '18 12:07 waako

Any way I can include this in my project already? The fix mentioned by sghoweri?

kristiaanvandeneynde avatar Jun 04 '19 13:06 kristiaanvandeneynde