Çevirisi Olmayan Bağlantıları Kaldırmak

Veli Akçakaya
Veli Akçakaya Drupal Developer

Drupal 8 ve Drupal 9'da sitelerde birden fazla dili aktive ederseniz menüde ilgili sayfanın çevirisi olsa da olmasa da menüde görünür. Örneğin Hakkında sayfasını oluşturdunuz ancak About Us çevirisini eklemediniz, sitenin ingilizcesine geçtiğinizde menüde Hakkımızda görünür olur ve Türkçe sayfaya gider. Bu gibi durumların önüne geçmek için menüler oluşturulurken ilgili menünün çevirisi olup olmadığı kontrol edilir ve eğer çevirisi yoksa ilgili menü gösterilmez.

function TemaAdı_preprocess_menu(&$variables) {
  if ($variables['menu_name'] == 'ekonomi') {
    $language = Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId();
    foreach ($variables['items'] as $key => $item) {
      if(!$variables['items'][$key] = TemaAdı_checkForMenuItemTranslation($item, $language)) {
        unset($variables['items'][$key]);
      }
    }
  }
}
function TemaAdı_checkForMenuItemTranslation($item, $language) {
  $menuLinkEntity = TemaAdı_load_link_entity_by_link($item['original_link']);

  if ($menuLinkEntity != NULL) {
    $languages = $menuLinkEntity->getTranslationLanguages();
    // Remove links which is not translated to current language.
    if (!array_key_exists($language, $languages)) {
      return false;
    } else {
      if(count($item['below']) > 0) {
        foreach ($item['below'] as $subkey => $subitem) {
          if(!$item['below'][$subkey] = TemaAdı_checkForMenuItemTranslation($subitem, $language)) {
            unset($item['below'][$subkey]);
          }
        }
      }
      return $item;
    }

  }
}
function TemaAdı_load_link_entity_by_link(MenuLinkInterface $menuLinkContentPlugin) {
  $entity = NULL;
  if ($menuLinkContentPlugin instanceof MenuLinkContent) {
    list($entity_type, $uuid) = explode(':', $menuLinkContentPlugin->getPluginId(), 2);
    $entity = \Drupal::entityManager()->loadEntityByUuid($entity_type, $uuid);
  }
  return $entity;
}

Ofislerimiz

Drupart AR-GE

GOSB Teknopark Hi-Tech Bina 3.Kat
B3 Gebze - KOCAELİ

+90 262 678 8872 

[email protected]

Drupart Frankfurt

Media4People Bleichstr. 26 64283 Darmstadt
Deutschland

+49 (0) 6151 – 492 70 23 

[email protected]

Drupart Dublin

20 Harcourt Street, Dublin 2, D02 H364

+353 (87) 198 6950 

[email protected]