From 7582c51cfefa24b0e059458aa4bf04c3d537d0de Mon Sep 17 00:00:00 2001 From: Scott Sawyer Date: Wed, 3 Nov 2021 01:05:37 -0400 Subject: [PATCH 1/2] Added hook_link_alter implementation, updated coding standards --- facets_hardcode.module | 75 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 7 deletions(-) diff --git a/facets_hardcode.module b/facets_hardcode.module index 2bf1f1e..efa112f 100644 --- a/facets_hardcode.module +++ b/facets_hardcode.module @@ -1,9 +1,24 @@ isRouted()) { + $path = $url->toString(); + if (strpos($path, '/facets-hardcode/') === 0) { + $config = \Drupal::config('facets_hardcode.settings'); + $identifier = $config->get('dynamic_facets_url_identifier') ?? 'f'; + + $path = str_replace('/facets-hardcode', '', $path); + $facets = ''; + if (strpos($path, "/$identifier/") !== FALSE) { + [$path, $facets] = explode("/$identifier/", $path); + } + + /** @var \Drupal\Core\Path\AliasManagerInterface $aliasManager */ + $aliasManager = \Drupal::service('path.alias_manager'); + $languageManager = \Drupal::languageManager(); + $currentLanguage = $languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); + + $path = $aliasManager->getPathByAlias($path, $languageManager->getDefaultLanguage()->getId()); + $path = $aliasManager->getAliasByPath($path, $currentLanguage); + + $uri = \Drupal::request()->getSchemeAndHttpHost(); + + if ($languageManager->getDefaultLanguage()->getId() !== $currentLanguage) { + $uri .= "/$currentLanguage"; + } + + $uri .= $path; + + if ($facets) { + $uri .= "/$identifier/$facets"; + } + + $variables['url'] = Url::fromUri($uri); + } + } } From 81a23b3b7701a900b25344f6b14509edae56bfe8 Mon Sep 17 00:00:00 2001 From: Scott Sawyer Date: Wed, 3 Nov 2021 13:41:34 -0400 Subject: [PATCH 2/2] Refactored to support menu items not rendered through 'link()' --- facets_hardcode.module | 91 ++++++++++++++++++++++++++++++++---------- 1 file changed, 69 insertions(+), 22 deletions(-) diff --git a/facets_hardcode.module b/facets_hardcode.module index efa112f..efd5c29 100644 --- a/facets_hardcode.module +++ b/facets_hardcode.module @@ -61,36 +61,83 @@ function facets_hardcode_link_alter(&$variables) { if (!$url->isRouted()) { $path = $url->toString(); if (strpos($path, '/facets-hardcode/') === 0) { - $config = \Drupal::config('facets_hardcode.settings'); - $identifier = $config->get('dynamic_facets_url_identifier') ?? 'f'; + $uri = facets_hardcode_replace_path($path); + $variables['url'] = Url::fromUri($uri); + } + } +} + +/** + * Implements hook_preprocess_menu(). + */ +function facets_hardcode_preprocess_menu(&$variables) { + if (isset($variables['items'])) { + $variables['items'] = facets_hardcode_replace_menu_items($variables['items']); + } +} - $path = str_replace('/facets-hardcode', '', $path); - $facets = ''; - if (strpos($path, "/$identifier/") !== FALSE) { - [$path, $facets] = explode("/$identifier/", $path); +/** + * Replace menu link item below. + * + * @param array $items + * The items to replace the url. + * + * @return array + * The items with the url replaced. + */ +function facets_hardcode_replace_menu_items($items) { + foreach ($items as $key => $item) { + if (isset($item['url']) && !$item['url']->isRouted()) { + $path = $item['url']->toString(); + if (strpos($path, '/facets-hardcode/') === 0) { + $uri = facets_hardcode_replace_path($path); + $items[$key]['url'] = Url::fromUri($uri); } + } + if (!empty($item['below'])) { + $items[$key]['below'] = facets_hardcode_replace_menu_items($item['below']); + } + } + return $items; +} - /** @var \Drupal\Core\Path\AliasManagerInterface $aliasManager */ - $aliasManager = \Drupal::service('path.alias_manager'); - $languageManager = \Drupal::languageManager(); - $currentLanguage = $languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); +/** + * Replace 'facets-hardcode' in links. + * + * @param string $path + * The original path. + * + * @return string + * The replaced path. + */ +function facets_hardcode_replace_path(string $path) { + $config = \Drupal::config('facets_hardcode.settings'); + $identifier = $config->get('dynamic_facets_url_identifier') ?? 'f'; + + $path = str_replace('/facets-hardcode', '', $path); + $facets = ''; + if (strpos($path, "/$identifier/") !== FALSE) { + [$path, $facets] = explode("/$identifier/", $path); + } - $path = $aliasManager->getPathByAlias($path, $languageManager->getDefaultLanguage()->getId()); - $path = $aliasManager->getAliasByPath($path, $currentLanguage); + /** @var \Drupal\Core\Path\AliasManagerInterface $aliasManager */ + $aliasManager = \Drupal::service('path.alias_manager'); + $languageManager = \Drupal::languageManager(); + $currentLanguage = $languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); - $uri = \Drupal::request()->getSchemeAndHttpHost(); + $path = $aliasManager->getPathByAlias($path, $languageManager->getDefaultLanguage()->getId()); + $path = $aliasManager->getAliasByPath($path, $currentLanguage); - if ($languageManager->getDefaultLanguage()->getId() !== $currentLanguage) { - $uri .= "/$currentLanguage"; - } + $uri = \Drupal::request()->getSchemeAndHttpHost(); - $uri .= $path; + if ($languageManager->getDefaultLanguage()->getId() !== $currentLanguage) { + $uri .= "/$currentLanguage"; + } - if ($facets) { - $uri .= "/$identifier/$facets"; - } + $uri .= $path; - $variables['url'] = Url::fromUri($uri); - } + if ($facets) { + $uri .= "/$identifier/$facets"; } + return $uri; }