2010-07-21 9 views

Trả lời

7

MENU_NORMAL_ITEM tạo mục menu trong khi MENU_CALLBACK thì không. Đó là sự khác biệt duy nhất.

+0

tại sao trên thế giới tôi muốn thêm mục menu không phải là mục menu? – Cheeso

+0

Bởi vì 'menu' là một chút nhầm lẫn. Hệ thống menu là bộ định tuyến Drupal 7. Vì vậy, nếu bạn muốn một URL để thực hiện một mô-đun/chức năng cụ thể thì bạn cần phải tạo một mục menu MENU_CALLBACK. – BartVB

13

Câu trả lời chính xác hơn là hook_menu() tạo các mục bộ định tuyến và các liên kết menu cũng được tạo. MENU_NORMAL_ITEM tạo liên kết menu sẽ xuất hiện trong menu điều hướng, trong khi MENU_CALLBACK không thêm liên kết menu, vì vậy liên kết này sẽ không xuất hiện trong menu.

+0

Điều tôi muốn chỉ ra là hook_menu hơi khó hiểu - cả hai đều định nghĩa router nói rằng đường dẫn X đi đến hàm Y, nhưng nó cũng định nghĩa menu điều hướng hiển thị các liên kết liên quan đến trang bạn đang truy cập. –

3

Ngoài nhận xét ở trên, MENU_CALLBACK có thể được sử dụng trong một số trường hợp như AJAX. Ví dụ: example.com/ajax/country_list là MENU_CALLBACK trả về danh sách các quốc gia ở định dạng HTML, JSON hoặc XML ... Menu này không xuất hiện trong trình duyệt. Bạn có thể truy cập http://api.drupal.org/api/group/menu/6 để biết thêm thông tin.

+0

Đây là câu trả lời duy nhất làm sáng tỏ lý do tại sao có MENU_CALLBACK. – Cheeso

2

Drupal ánh xạ các url hoạt động.
Có nghĩa là bạn cần một chức năng cho mọi URL. Chức năng chủ yếu có trong một mô-đun.
ex mysite/add sẽ có ánh xạ tới hàm trong mô-đun.
Nhiều trường hợp chúng tôi không muốn URL như một mục menu nhưng có ý định sử dụng nó cho các mục đích khác. Ví dụ tốt nhất là một cuộc gọi lại Ajax.
Ví dụ: bạn có biểu mẫu đề xuất tự động yêu cầu chức năng đề xuất trong máy chủ. Giao diện người dùng Ajax sẽ cần url để kích hoạt yêu cầu. Hãy đặt url là www.mysite/đề xuất
Đây là trường hợp bạn cần một MENU_CALLBACK

function example_menu() { 
     $items['suggest'] = array(
     'page callback' => 'example_suggest', 
     'access callback' => TRUE, 
     'type' => MENU_CALLBACK, 
    ); 
    return $items; 
    } 
    function example_suggest() { 
    //you can return the autosuggested items to the page 
    } 
Các vấn đề liên quan