Làm cách nào để sử dụng tham số URL và gọi lại trang cho menu tab chính xác?


7

Tôi đang sử dụng Drupal 6 và tôi đang cố gắng hiển thị hai tab (menu) trên trang có URL / car_info. Cả hai trang mà các tab liên kết sẽ lấy nid của một nút làm tham số. Mã hiện tại của tôi trông như sau:

  $items['vehicle_info/%/basic'] = array(
    'title' => t('Basic & Bookings'),
    'page arguments' => array(1),
    'access callback' => 'user_access',
    'access arguments' => array('administer fleet'),
    'type' => MENU_DEFAULT_LOCAL_TASK,
    'weight' => 10
   );
  $items['vehicle_info/%/history'] = array(
    'title' => t('Service history'),
    'page callback' => 'vehicle_service_history',
    'page arguments' => array(1),
    'access arguments' => array('administer fleet'),
    'type' => MENU_LOCAL_TASK,
    'weight' => 20
   );

Tôi đang gặp phải 2 vấn đề:

  1. Tab "Lịch sử dịch vụ" không mở trang "car_service_history" (đây thực sự là một chế độ xem với URL car_service_history). Nó mở ra một trang với URL "xe_info / 123 / history", không tồn tại (123 là viết tắt của nid hiện tại).
  2. Tab mặc định "Cơ bản & Đặt chỗ" không liên kết đến URL "xe_info / 123" mà chỉ liên kết đến "xe_info".

Tôi đang thiếu gì?

Câu trả lời:


0

Một vài điều dường như đang thiếu ở đây. Sự nhầm lẫn chính dường như xung quanh page callbackđó là một chức năng không phải là một URL. URL là chìa khóa cho $itemsmảng của bạn .

  1. Mục menu đầu tiên của bạn không có 'trang gọi lại'. Điều này sẽ được kế thừa từ mục cha mẹ (được khóa là $items['vehicle_info/%']và một loại MENU_NORMAL_ITEM) nếu bạn có, nhưng bạn thì không.
  2. Menu mục thứ hai của bạn dường như cũng bị nhầm lẫn URL với gọi lại. Nếu bạn muốn nó được xử lý bởi một chế độ xem thì trang của bạn hiển thị trên chế độ xem của bạn sẽ xử lý đường dẫn URL vehicle_info/%/history, tức là nó sẽ có bộ lọc theo ngữ cảnh. Quan điểm của bạn có hoạt động như thế này không?

0

Nếu phương tiện là loại nội dung tình cờ ngồi dưới đường dẫn 'xe_info' thì bạn có thể đơn giản hóa điều này rất nhiều. Tăng cường các tab cốt lõi thông thường

$items['node/%node/basic'] = array(
  'title' => t('Basic & Bookings'),
  'page arguments' => array(1),
  'access callback' => 'vehicle_administer_fleet',
  'access arguments' => array(1),
  'type' => MENU_LOCAL_TASK,
  'weight' => 10
);
$items['node/%node/history'] = array(
  'title' => t('Service history'),
  'page callback' => 'vehicle_service_history',
  'page arguments' => array(1),
  'access callback' => 'vehicle_administer_fleet',
  'access arguments' => array(1),
  'type' => MENU_LOCAL_TASK,
  'weight' => 20
);

Bạn cũng sẽ cần xác định gọi lại truy cập tùy chỉnh

function vehicle_administer_fleet($node) {
  return $node->type == 'vehicle' && user_access('administer fleet');
}

Đây là những gì lõi drupal làm cho các tab nút riêng của nó, thường thì không, tốt nhất là giữ sự nhất quán


Cảm ơn, tôi muốn thử điều này nhưng tôi không chắc ý của bạn là gì "Nếu phương tiện là loại nội dung tình cờ ngồi dưới đường dẫn 'xe_info'". Làm thế nào bạn có thể thiết lập một loại nội dung nằm dưới một đường dẫn?
drumming_cat

0

Bạn đã đi sai đường !!!
bạn có thể đạt được hoàn toàn những gì bạn muốn với lượt xem.

Tạo chế độ xem A, thêm trường của bạn như bạn muốn, đặt Url trang thành node/*/basic, trong phần xem Menu (bên dưới url trang) chọn tab menu với tiêu đề của bạn ( xem phần này để biết thêm thông tin về tab tạo menu có chế độ xem). Ngoài ra trong phần Access , bạn có thể chọn người có thể xem trang này được tạo bởi lượt xem.

Tôi nghĩ rằng bạn thực sự không biết quan điểm thực sự mạnh mẽ như thế nào;).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.