diff --git a/modules/social_media_links_field/src/Plugin/Field/FieldFormatter/SocialMediaLinksFieldDefaultFormatter.php b/modules/social_media_links_field/src/Plugin/Field/FieldFormatter/SocialMediaLinksFieldDefaultFormatter.php index 52cbd836a6..aeec4db4eb 100644 --- a/modules/social_media_links_field/src/Plugin/Field/FieldFormatter/SocialMediaLinksFieldDefaultFormatter.php +++ b/modules/social_media_links_field/src/Plugin/Field/FieldFormatter/SocialMediaLinksFieldDefaultFormatter.php @@ -58,6 +58,7 @@ public function viewElements(FieldItemListInterface $items, $langcode) { '#theme' => 'social_media_links_platforms', '#platforms' => $platforms, '#appearance' => $this->getSetting('appearance'), + '#sorting' => $this->getSetting('sorting'), '#attached' => [ 'library' => ['social_media_links/social_media_links.theme'], ], @@ -77,6 +78,7 @@ public static function defaultSettings() { return [ 'appearance' => [], 'link_attributes' => [], + 'sorting' => [], ] + parent::defaultSettings(); } @@ -135,6 +137,19 @@ public function settingsForm(array $form, FormStateInterface $form_state) { ], ]; + // Sorting + $element['sorting'] = [ + '#type' => 'details', + '#title' => $this->t('Sorting'), + '#tree' => TRUE, + ]; + $element['sorting']['override'] = [ + '#type' => 'checkbox', + '#title' => $this->t('Override sorting.'), + '#description' => $this->t('Sort platforms as they appear in the widget.'), + '#default_value' => isset($config['sorting']['override']) ? $config['sorting']['override'] : 0, + ]; + return $element; } @@ -151,6 +166,9 @@ public function settingsSummary() { if (empty($config['appearance']['show_name'])) { $config['appearance']['show_name'] = 0; } + if (empty($config['sorting']['override'])) { + $config['sorting']['override'] = 0; + } $orientation = $config['appearance']['orientation'] == 'v' ? $this->t('vertical') : $this->t('horizontal'); $summary[] = $this->t('Orientation: @orientation', ['@orientation' => $orientation]); @@ -158,6 +176,9 @@ public function settingsSummary() { $show_name = (isset($config['appearance']['show_name']) && $config['appearance']['show_name']) ? $this->t('Yes') : $this->t('No'); $summary[] = $this->t('Show name: @show_name', ['@show_name' => $show_name]); + $sorting_override = (isset($config['sorting']['override']) && $config['sorting']['override']) ? $this->t('Yes') : $this->t('No'); + $summary[] = $this->t('Override sorting: @sorting_override', ['@sorting_override' => $sorting_override]); + return $summary; } @@ -169,6 +190,7 @@ public function settingsSummary() { */ protected function getPlatformsWithValues(FieldItemListInterface $items) { $platform_settings = $items->getSetting('platforms'); + $sorting = $this->getSetting('sorting'); $all_platforms_available = TRUE; foreach ($platform_settings as $platform_id => $platform) { @@ -179,7 +201,7 @@ protected function getPlatformsWithValues(FieldItemListInterface $items) { } $platforms = []; - foreach ($items as $item) { + foreach ($items as $k => $item) { // We have two possible structures where the platform values can be // stored. // * If the select widget was used the values are saved in two fields @@ -191,7 +213,7 @@ protected function getPlatformsWithValues(FieldItemListInterface $items) { if ($all_platforms_available || isset($platform_settings[$item->platform]['enabled']) && $platform_settings[$item->platform]['enabled']) { $platforms[$item->platform] = [ 'value' => $item->value, - 'weight' => $platform_settings[$item->platform]['weight'], + 'weight' => $sorting['override'] == 1 ? $k : $platform_settings[$platform_id]['weight'], 'description' => $platform_settings[$item->platform]['description'], ]; }