it-swarm-vi.com

Làm cách nào tôi có thể tạo chế độ xem các nút con dựa trên mối quan hệ menu?

Giả sử bạn có các trang sau trong cây menu:

  • Dự án [.__.]
    • Dự án một
    • Dự án hai
    • Dự án ba

Tôi đang tìm cách tạo ra một khung nhìn sẽ được nhúng vào trang Project (cha mẹ) sẽ hiển thị một pic, tiêu đề và văn bản (tóm tắt) từ các trang con.

Mối quan hệ giữa cha mẹ và con cái được xác định trong cây menu.

Tôi biết tôi có thể sử dụng tham chiếu nút, nhưng điều đó có nghĩa là mỗi khi ai đó tạo một trang họ sẽ phải xác định mối quan hệ menu và sau đó là mối quan hệ tham chiếu nút.

Ngoài ra tôi biết rằng tôi có thể tạo một loại nội dung khác nhưng tôi nghĩ rằng điều này là quá mức cần thiết vì tất cả các trang nội dung trông giống nhau.

17
Camsoft

Một giải pháp là sử dụng thuật ngữ phân loại để xác định các mối quan hệ và sau đó sử dụng mô-đun Menu phân loại để dịch các mối quan hệ thuật ngữ đó thành các mục menu. Sau đó, bạn có thể sử dụng mô-đun Trang tùy chỉnh và mô-đun Bối cảnh để kiểm soát thông tin và khu vực trên tất cả các trang nếu bạn không muốn sử dụng bảng.

4
Adam S

Bạn có thể thực hiện chính xác điều này bằng cách sử dụng các mô đun Menu Node APIMenu Node Lượt xem .

Tạo chế độ xem với loại nội dung được yêu cầu của bạn và chọn bộ lọc theo ngữ cảnh của "Menu: ID liên kết menu" (điều này chỉ khả dụng với các mô-đun trên được cài đặt).

Trong phần "Khi giá trị bộ lọc không khả dụng", chọn "Cung cấp giá trị mặc định" và chọn "Mã PHP".

Đoạn mã sau sẽ làm điều đó, sau đó bạn chỉ cần hiển thị một khối từ chế độ xem và bạn đang ở đó:

if (function_exists('menu_node_get_links')){  
   $node = node_load(intval(arg(1)));  
   if (isset($node->menu_node_links)){
      foreach($node->menu_node_links as $mlid=>$data){  
         return $mlid;
      }  
   }
}
16
Emile Kott

Mô-đun phân cấp nút cho phép loại mối quan hệ này, cũng như cung cấp tích hợp lượt xem.

Hệ thống phân cấp nút cho phép các nút là con của các nút khác tạo ra hệ thống phân cấp nội dung giống như cây. Các mô-đun cung cấp:

  • 1-Click tạo menu phân cấp
  • Bánh mì phân cấp
  • Các url phân cấp tự động bằng Pathauto (và mô-đun mã thông báo)

    (ví dụ: q = aboutus/history/start).

  • Tự động tạo các menu phân cấp nếu muốn.
  • Tích hợp lượt xem tùy chọn.
  • Tùy chọn Node Tích hợp truy cập.
4
CCMonkey

Có thể điều này đã thay đổi cho D7/Lượt xem 3, nhưng bạn không cần bất kỳ PHP để thực hiện hành vi mong muốn:

  1. cài đặt menu_view , menu_nodemenu_node_view mô-đun.
  2. tạo một giao diện mới của kiểu "cây menu"
  3. thêm các trường "Menu: tiêu đề liên kết" và "Menu: mô tả"
  4. Thêm Bộ lọc ngữ cảnh/Đối số "Menu: Node ID"; Cung cấp giá trị mặc định "ID nội dung từ URL"
  5. Thêm mối quan hệ "Menu: id menu liên kết cha mẹ"

voila. Nó không nên hoạt động , nhưng nó có.

Nó hoạt động tốt chỉ với các nút, nhưng lợi thế của việc sử dụng các liên kết menu trên hệ thống phân cấp nút là bạn không bị giới hạn trong việc xây dựng điều hướng xung quanh các nút. Bạn thậm chí có thể bao gồm các liên kết bên ngoài trong quan điểm của bạn.

2
aaronbauman

Có một mô-đun tương đối mới Menu xem Node Bộ lọc trẻ em dường như làm chính xác những gì bạn muốn:

Mô-đun này thêm bộ lọc theo ngữ cảnh vào Chế độ xem sẽ truy xuất các nút con của nút theo cấu trúc của menu.

2
nwellnhof

Nếu bạn sử dụng bản dịch thực thể và nút được đính kèm vào các menu khác nhau, đây là bản điều chỉnh mã lọc theo ngôn ngữ hiện tại. Bạn cần sao chép mã này dưới dạng PHP cho bộ lọc theo ngữ cảnh (id liên kết menu cha) trong chế độ xem của bạn như được giải thích trong các câu trả lời khác

 if (function_exists('menu_node_get_links')) {
global $language;
$lang = $language->language;
$node = node_load(intval(arg(1)));
if (isset($node->menu_node_links)) {
  foreach ($node->menu_node_links as $mlid => $data) {  
    if ($lang == $data->language) {
      return($mlid);
    }
  }
}
  }
0
bendev

Câu trả lời từ Emile là đúng, nhưng tôi đã phải dán mã được đề cập PHP trong a bộ lọc theo ngữ cảnh của loại " Menu: Id liên kết menu cha mẹ ".

if (function_exists('menu_node_get_links')){  
   $node = node_load(intval(arg(1)));  
   if (isset($node->menu_node_links)){
      foreach($node->menu_node_links as $mlid=>$data){  
         return $mlid;
      }  
   }
}
0
cptstarling

Bạn đã cân nhắc sử dụng Tham khảo nút cho mục đích này chưa?

  1. Cung cấp trường tham chiếu nút cho loại nội dung bạn muốn hiển thị.
  2. Sử dụng trường đó làm bộ lọc theo ngữ cảnh trong Chế độ xem (giá trị mặc định: ID nội dung từ url ).
  3. Thêm chế độ xem này hiển thị dưới dạng một khối cho nội dung. Nút mà nó đang được hiển thị sẽ được xem như là cha mẹ của các nút tham chiếu đến nó chẳng hạn.

Do đó, bạn có thể đạt được một kết quả tương tự như bạn có thể đang tìm kiếm.

0
cptstarling

Từ hàng đợi vấn đề of Menu Node Lượt xem chúng tôi có giải pháp Nice này:

  • thêm bộ lọc theo ngữ cảnh với 'id liên kết menu cha',
  • chọn 'Cung cấp giá trị mặc định'
  • chọn 'mã php tùy chỉnh'
  • nhập mã sau

    $menu_item = menu_get_active_trail();  
    $current_item = array_pop($menu_item);  
    $menu_item_plid = $current_item['plid'];  
    return $menu_item_plid;  
    
0
tostinni