function menu_manipulator_get_multilingual_menu in Menu Manipulator 3.0.x
Same name and namespace in other branches
- 8.2 menu_manipulator.module \menu_manipulator_get_multilingual_menu()
- 8 menu_manipulator.module \menu_manipulator_get_multilingual_menu()
- 2.0.x menu_manipulator.module \menu_manipulator_get_multilingual_menu()
Get a menu tree filtered by the current language.
Based on our custom MenuTreeManipulators services. This is pretty useful as of now (8.4.x) as Drupal doesn't provide a way to filer MenuLinkContent entity by their language.
// Implements theme_preprocess_menu().
function yourtheme_preprocess_menu(&$variables, $hook) {
if (isset($variables['menu_name']) && ($menu_name = $variables['menu_name'])) {
$moduleHandler = \Drupal::service('module_handler');
if ($moduleHandler
->moduleExists('menu_manipulator')) {
$menu_tree_translated = menu_manipulator_get_multilingual_menu($menu_name);
$variables['items'] = isset($menu_tree_translated['#items']) ? $menu_tree_translated['#items'] : [];
}
}
}
Parameters
string $menu_name: The menu machine name.
\Drupal\Core\Menu\MenuTreeParameters $parameters: Extra parameters for the menu tree.
Return value
array The filtered MenuTree renderable array.
File
- ./
menu_manipulator.module, line 64 - Contains menu_manipulator.module.
Code
function menu_manipulator_get_multilingual_menu(string $menu_name, MenuTreeParameters $parameters = NULL) {
$menu_tree = \Drupal::menuTree();
$manipulators = [
[
'callable' => 'menu.default_tree_manipulators:checkAccess',
],
[
'callable' => 'menu.default_tree_manipulators:generateIndexAndSort',
],
[
'callable' => 'menu_manipulator.menu_tree_manipulators:filterByCurrentLanguage',
],
];
if ($menu_name == 'admin') {
// Specific manipulation for the "Admin Toolbar" menu.
// See admin_toolbar_prerender_toolbar_administration_tray()
$parameters = $parameters ?: new MenuTreeParameters();
$parameters
->setRoot('system.admin')
->excludeRoot()
->setMaxDepth(4)
->onlyEnabledLinks();
}
else {
// Default method to retrieve menu items.
// See MenuLinkTreeInteface::getCurrentRouteMenuTreeParameters().
$parameters = $parameters ?: $menu_tree
->getCurrentRouteMenuTreeParameters($menu_name);
}
// Manipulate the menu tree to filter by current language.
$menu = $menu_tree
->load($menu_name, $parameters);
$menu = $menu_tree
->transform($menu, $manipulators);
return $menu_tree
->build($menu);
}