diff --git a/src/ClassyLayout.php b/src/ClassyLayout.php index ea71efa83229280b4c0972500b0991fc07aeb6c7..99006928762645d51d34d0d2c5225dfb9f6dd898 100644 --- a/src/ClassyLayout.php +++ b/src/ClassyLayout.php @@ -20,7 +20,7 @@ class ClassyLayout extends LayoutDefault implements PluginFormInterface { $build['#attributes']['class'] = $build['#attributes']['class'] ?? []; $definitions = $this->getPluginDefinition()->get('classes'); foreach ($classes as $key => $class_set) { - $definition = $definitions[$key]; + $definition = $definitions[$key] ?? NULL; if (is_string($class_set) && $class_set) { $build['#attributes']['class'][] = $class_set; } @@ -66,7 +66,11 @@ class ClassyLayout extends LayoutDefault implements PluginFormInterface { if (empty($class_definition['options']) || !is_array($class_definition['options'])) { throw new \Exception('The "options" key is required for layout class definitions.'); } - $definition_default = $class_definition['default'] ?? NULL; + if ($class_definition['multiple']) { + $definition_default = $class_definition['default'] ?? []; + } else { + $definition_default = NULL; + } $form['classes'][$key] = [ '#title' => $class_definition['label'] ?? $this->t('Classes'), '#type' => 'select', diff --git a/tests/src/Functional/LayoutSectionClassesTest.php b/tests/src/Functional/LayoutSectionClassesTest.php index 22980e92a2669faa65578e25b7ec64f53a4467a4..4a463923bd1b3598c597b18f8e8458e55eefc7a5 100644 --- a/tests/src/Functional/LayoutSectionClassesTest.php +++ b/tests/src/Functional/LayoutSectionClassesTest.php @@ -2,6 +2,8 @@ namespace Drupal\Tests\layout_section_classes\Functional; +use Drupal\Core\Form\FormState; +use Drupal\layout_builder\LayoutEntityHelperTrait; use Drupal\layout_builder\Plugin\SectionStorage\OverridesSectionStorage; use Drupal\layout_builder\Section; use Drupal\layout_section_classes_test\NewTestClassyLayout; @@ -15,6 +17,8 @@ use Symfony\Component\DomCrawler\Crawler; */ class LayoutSectionClassesTest extends LayoutBuilderCompatibilityTestBase { + use LayoutEntityHelperTrait; + /** * {@inheritdoc} */ @@ -54,6 +58,12 @@ class LayoutSectionClassesTest extends LayoutBuilderCompatibilityTestBase { $this->assertCount(1, $crawler->filter('.some-region-classes.a-region-class')); // Assert attributes work as expected. $this->assertCount(1, $crawler->filter('.background--wave-dark.background--primary-light[data-some-attribute="foo"]')); + + // Check if the default value is an array. + $plugin = \Drupal::service('plugin.manager.core.layout')->createInstance('test_layout'); + $form = $plugin->buildConfigurationForm([], new FormState(), $sections->get(0)); + $this->assertNotEmpty($form); + $this->assertIsArray($form['classes']['style']['#default_value']); } /**