Commit ead39eb4 authored by Omkar Deshpande's avatar Omkar Deshpande Committed by Greg Boggs
Browse files

Issue #3276168 by omkar-pd, artis.bajars: Allow selecting a preferred menu...

Issue #3276168 by omkar-pd, artis.bajars: Allow selecting a preferred menu when utilising the "use_menu_title_as_fallback" option
parent 9366fbc0
Loading
Loading
Loading
Loading
+1 −0
Changes for config/install/easy_breadcrumb.settings.yml: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ include_title_segment: true
language_path_prefix_as_segment: false
use_menu_title_as_fallback: false
use_page_title_as_menu_title_fallback: false
menu_title_preferred_menu: ''
remove_repeated_segments: true
term_hierarchy: false
absolute_paths: false
+3 −0
Changes for config/schema/easy_breadcrumb.schema.yml: 3 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -49,6 +49,9 @@ easy_breadcrumb.settings:
    use_page_title_as_menu_title_fallback:
      type: boolean
      label: 'Use the page title as a fallback if the menu title is not set'
    menu_title_preferred_menu:
      type: string
      label: 'Preferred menu to use as menu title source'
    remove_repeated_segments:
      type: boolean
      label: 'Remove repeated identical segments'
+16 −0
Changes for src/EasyBreadcrumbBuilder.php: 16 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -539,8 +539,24 @@ class EasyBreadcrumbBuilder implements BreadcrumbBuilderInterface {
                  }
                }
              }
              else {
                $preferred_menu = $this->config->get(EasyBreadcrumbConstants::MENU_TITLE_PREFERRED_MENU);
                if ($preferred_menu) {
                  $preferred_found = FALSE;
                  foreach ($menu_links as $link) {
                    if ($link->getMenuName() == $preferred_menu) {
                      $menu_link = $link;
                      $preferred_found = TRUE;
                      break;
                    }
                  }
                  if (!$preferred_found) {
                    $menu_link = reset($menu_links);
                  }
                }
                else {
                  $menu_link = reset($menu_links);
                }
                $title = $this->normalizeText($menu_link->getTitle());
                if (array_key_exists($title, $replacedTitles)) {
                  $title = $replacedTitles[$title];
+5 −0
Changes for src/EasyBreadcrumbConstants.php: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -121,6 +121,11 @@ class EasyBreadcrumbConstants {
   */
  const USE_PAGE_TITLE_AS_MENU_TITLE_FALLBACK = 'use_page_title_as_menu_title_fallback';

  /**
   * Preferred menu to use as menu title source.
   */
  const MENU_TITLE_PREFERRED_MENU = 'menu_title_preferred_menu';

  /**
   * Use site title as the front page segment.
   */
+21 −0
Changes for src/Form/EasyBreadcrumbGeneralSettingsForm.php: 21 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ namespace Drupal\easy_breadcrumb\Form;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\easy_breadcrumb\EasyBreadcrumbConstants;
use Drupal\system\Entity\Menu;

/**
 * Build Easy Breadcrumb settings form.
@@ -112,6 +113,26 @@ class EasyBreadcrumbGeneralSettingsForm extends ConfigFormBase {
      '#default_value' => $config->get(EasyBreadcrumbConstants::USE_MENU_TITLE_AS_FALLBACK),
    ];

    $menu_list = array_map(function ($menu) { return $menu->label(); }, Menu::loadMultiple());
    asort($menu_list);
    $details_general[EasyBreadcrumbConstants::MENU_TITLE_PREFERRED_MENU] = [
      '#type' => 'select',
      '#title' => $this->t('Preferred menu'),
      '#options' => $menu_list,
      '#empty_option' => t('- None -'),
      '#empty_value' => '',
      '#description' => $this->t('Preferred menu to use as menu title source. Useful if menu links with identical paths exist in multiple menus.'),
      '#default_value' => $config->get(EasyBreadcrumbConstants::MENU_TITLE_PREFERRED_MENU),
      '#states' => [
        'disabled' => [
          ':input[name="' . EasyBreadcrumbConstants::USE_MENU_TITLE_AS_FALLBACK . '"]' => ['checked' => FALSE],
        ],
        'invisible' => [
          ':input[name="' . EasyBreadcrumbConstants::USE_MENU_TITLE_AS_FALLBACK . '"]' => ['checked' => FALSE],
        ],
      ],
    ];

    $details_general[EasyBreadcrumbConstants::USE_PAGE_TITLE_AS_MENU_TITLE_FALLBACK] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Use page title as fallback for menu title'),