diff --git a/menu_link_attributes.module b/menu_link_attributes.module index 5ecfe6c..ea07c0f 100644 --- a/menu_link_attributes.module +++ b/menu_link_attributes.module @@ -140,7 +140,6 @@ function menu_link_attributes_menu_link_content_form_entity_builder($entity_type $menu_link_options = $form_state->get('menu_link_options'); } elseif ($menu_link->isDefaultTranslation() || !$menu_link->isDefaultTranslationAffectedOnly()) { - $menu_link_options = $menu_link->link->first()->options ?: []; $menu_link_attributes = ['attributes' => $form_state->getValue('attributes')]; foreach ($menu_link_attributes['attributes'] as $attribute_name => &$attribute_value) { @@ -172,7 +171,6 @@ function menu_link_attributes_menu_link_content_form_entity_builder($entity_type } $menu_link_attributes = array_filter($menu_link_attributes); - $menu_link_options = array_merge_recursive($menu_link_options, $menu_link_attributes); } else { $original = \Drupal::entityTypeManager() @@ -181,7 +179,7 @@ function menu_link_attributes_menu_link_content_form_entity_builder($entity_type $menu_link_options = $original->get('link')->first()->options; } - $menu_link->link->first()->options = $menu_link_options; + $menu_link->link->first()->options = $menu_link_attributes; // Set for other languages. if ($menu_link->isDefaultTranslation() || !$menu_link->isDefaultTranslationAffectedOnly()) { diff --git a/tests/src/Functional/MenuLinkAttributesFormTest.php b/tests/src/Functional/MenuLinkAttributesFormTest.php new file mode 100644 index 0000000..99e0014 --- /dev/null +++ b/tests/src/Functional/MenuLinkAttributesFormTest.php @@ -0,0 +1,67 @@ +drupalLogin($this->drupalCreateUser([ + 'administer menu', + 'link to any page', + 'use menu link attributes', + ])); + + $menu_link = MenuLinkContent::create([ + 'title' => 'Menu link test', + 'provider' => 'menu_link_content', + 'menu_name' => 'admin', + 'link' => [ + 'uri' => 'internal:/user/login', + 'options' => [ + 'attributes' => [ + 'class' => ['foo'], + ], + ], + ], + ]); + $menu_link->save(); + + $this->drupalGet($menu_link->toUrl('edit-form')); + $this->assertSession()->statusCodeEquals(200); + $this->assertSession()->fieldValueEquals('attributes[class]', 'foo'); + + $this->submitForm([ + 'attributes[class]' => 'bar', + ], 'Save'); + + // Attributes should be replaced on save. + $menuLinkContent = \Drupal::entityTypeManager()->getStorage('menu_link_content')->loadUnchanged($menu_link->id()); + $options = $menuLinkContent->getUrlObject()->getOptions(); + $this->assertEquals(['bar'], $options['attributes']['class']); + } + +}