Tôi không khuyên bạn nên mã hóa một loạt các nội dung trong chủ đề vì nó làm tăng khó khăn trong việc hiểu những gì đang diễn ra trong trang web cho các nhà phát triển mới, nhưng điều này có thể theo một vài cách khác nhau. Nó sẽ tốt hơn để sử dụng hệ thống khối và khu vực.
Sử dụng dịch vụ menu.link_tree để xây dựng từ đầu
Điều quan trọng là phải nhận ra rằng điều này nhận được dữ liệu thô và nếu không chuyển đổi cây menu, sẽ không có kiểm tra truy cập nào được thực hiện. Điều này có thể ổn vì một menu chính nên được công khai, nhưng điều đó không nhất thiết phải như vậy.
$menu_name = "main_menu"; // I think
$menu_tree = \Drupal::service('menu.link_tree');
$parameters = new \Drupal\Core\Menu\MenuTreeParameters();
$parameters
->setMaxDepth(1) // Or however far down the tree you want to go.
->onlyEnabledLinks()
->excludeRoot();
$tree = $menu_tree->load($menu_name, $parameters);
// $manipulators = [['callable' => 'menu.default_tree_manipulators::checkAccess']];
// $tree = $menu_tree->transform($tree, $manipulators);
foreach ($tree as $item) {
/** @var \Drupal\Core\Menu\MenuLinkInterface $link */
$link = $item->link;
}
Sử dụng một thể hiện khối đã biết bằng lập trình
Xem câu trả lời của @ Berdir tại đây: https://drupal.stackexchange.com/a/153195/42650