' . t('About') . ''; $output .= '

' . t('The Custom Menu Links module allows users to create menu links. These links can be translated if multiple languages are used for the site.'); if (\Drupal::moduleHandler()->moduleExists('menu_ui')) { $output .= ' ' . t('It is required by the Menu UI module, which provides an interface for managing menus and menu links. For more information, see the Menu UI module help page and the online documentation for the Custom Menu Links module.', [':menu-help' => \Drupal::url('help.page', ['name' => 'menu_ui']), ':drupal-org-help' => 'https://www.drupal.org/documentation/modules/menu_link']); } else { $output .= ' ' . t('For more information, see the online documentation for the Custom Menu Links module. If you enable the Menu UI module, it provides an interface for managing menus and menu links.', [':drupal-org-help' => 'https://www.drupal.org/documentation/modules/menu_link']); } $output .= '

'; return $output; } } /** * Implements hook_menu_delete(). */ function menu_link_content_menu_delete(MenuInterface $menu) { $storage = \Drupal::entityManager()->getStorage('menu_link_content'); $menu_links = $storage->loadByProperties(['menu_name' => $menu->id()]); $storage->delete($menu_links); } /** * Implements hook_path_insert(). */ function menu_link_content_path_insert($path) { _menu_link_content_update_path_alias($path['alias']); } /** * Helper function to update plugin definition using internal scheme. * * @param string $path * The path alias. */ function _menu_link_content_update_path_alias($path) { /** @var \Drupal\Core\Menu\MenuLinkManagerInterface $menu_link_manager */ $menu_link_manager = \Drupal::service('plugin.manager.menu.link'); /** @var \Drupal\menu_link_content\MenuLinkContentInterface[] $entities */ $entities = \Drupal::entityManager() ->getStorage('menu_link_content') ->loadByProperties(['link.uri' => 'internal:' . $path]); foreach ($entities as $menu_link) { $menu_link_manager->updateDefinition($menu_link->getPluginId(), $menu_link->getPluginDefinition(), FALSE); } } /** * Implements hook_path_update(). */ function menu_link_content_path_update($path) { if ($path['alias'] != $path['original']['alias']) { _menu_link_content_update_path_alias($path['alias']); _menu_link_content_update_path_alias($path['original']['alias']); } elseif ($path['source'] != $path['original']['source']) { _menu_link_content_update_path_alias($path['alias']); } } /** * Implements hook_path_delete(). */ function menu_link_content_path_delete($path) { _menu_link_content_update_path_alias($path['alias']); } /** * Implements hook_entity_predelete(). */ function menu_link_content_entity_predelete(EntityInterface $entity) { /** @var \Drupal\Core\Menu\MenuLinkManagerInterface $menu_link_manager */ $menu_link_manager = \Drupal::service('plugin.manager.menu.link'); $entity_type_id = $entity->getEntityTypeId(); foreach ($entity->uriRelationships() as $rel) { $url = $entity->toUrl($rel); $route_parameters = $url->getRouteParameters(); if (!isset($route_parameters[$entity_type_id])) { // Do not delete links which do not relate to this exact entity. For // example, "collection", "add-form", etc. continue; } // Delete all MenuLinkContent links that point to this entity route. $result = $menu_link_manager->loadLinksByRoute($url->getRouteName(), $route_parameters); if ($result) { foreach ($result as $id => $instance) { if ($instance->isDeletable() && strpos($id, 'menu_link_content:') === 0) { $instance->deleteLink(); } } } } }