Điểm:0

Liệt kê tất cả các nút có cùng ID cha của menu

lá cờ pt

Tôi có menu sau trong hệ thống của mình.

ảnh chụp màn hình

cha mẹ liên kết menu kết nối với một nút có ID là 58. Tất cả các liên kết menu phụ có ID gốc bằng 58.

Tôi cần tìm menu chính và menu phụ bằng cách sử dụng 58, nhưng tôi đã không thành công trong việc định vị bảng chứa thông tin đó.

Làm cách nào tôi có thể liệt kê các nút chia sẻ ID menu cụ thể?

sonfd avatar
lá cờ in
Bạn có thực sự đang cố gắng chỉ tìm các nút là nút con của một mục menu chính cụ thể và làm điều gì đó với chúng không? hoặc bạn chỉ đang cố gắng hiển thị tất cả các phần tử con của một mục menu cụ thể (cho dù các mục menu con trỏ đến các nút hay nút khác)?
lá cờ pt
Đúng. Tôi đang cố gắng yêu cầu các nút làm điều gì đó với chúng ID nút gốc và nút con sẽ đi vào logic nào đó ở nơi khác trên trang web.
Stefanos Petrakis avatar
lá cờ in
@sisko bạn có cơ hội thử câu trả lời được đề xuất của tôi không?
Điểm:0
lá cờ in

Các menu_link_content định nghĩa thực thể chứa thông tin liên quan đến câu hỏi của bạn; cụ thể là, bảng cơ sở dữ liệu chứa quan hệ cha-con sẽ là menu_link_content_data.

Dưới đây là một mẫu mã sẽ cung cấp một mảng id nút cho một nút cha, với điều kiện là có một liên kết menu được đính kèm với nút đó. Mã này sử dụng API của Drupal thay vì truy vấn SQL.

<?php

// Lấy gốc dựa trên một nút nhất định, ví dụ: nút 58.
$menu_link_root_entities = \Drupal::entityTypeManager()
  ->getStorage('menu_link_content')
  ->loadByProperties([
      'liên kết' => [
        'uri' => 'thực thể:nút/58'
      ],
    ],
);
$menu_link_root = đặt lại($menu_link_root_entities);

// Cần gọi cái này để khởi tạo dịch vụ tree_storage.
$menu_tree = \Drupal::menuTree();
// Nhận các thực thể nội dung liên kết menu dựa trên thuộc tính cha của chúng.
$menu_links = \Drupal::service('menu.tree_storage')->loadByProperties([
    // Cần một giá trị bộ lọc như menu_link_content:8031d182-7a0b-4798-839a-6c66bdd1f27b
    'parent' => 'menu_link_content:' . $menu_link_root->uuid(),
]) ?: [];

$node_ids = array_map(function($v){
    trả về $v['route_parameters']['node'];
}, $menu_links);

Hy vọng điều này sẽ giúp, chúc may mắn!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.