Thay đổi tất cả các url để bao gồm thêm thông tin


8

Những cái móc có sẵn để thay đổi các url? Ví dụ, có các mô-đun ngôn ngữ, khi được bật, sẽ cung cấp các url như /en/node/1thay vì để nó như /node/1.

Tôi muốn có một cái gì đó tương tự trong url, mà tôi có thể có quyền truy cập mà không bị xâm phạm chức năng khác.

Làm thế nào là điều này được thực hiện?

Câu trả lời:


4

Vì vậy, bạn đang tìm cách sửa đổi một URL liên kết như nó đang được viết? Tôi đã xem xét điều này gần đây và ngạc nhiên về số lượng săn bắn được yêu cầu.

Tôi đã đi cùng hook_url_outbound_alter( &$path, &$options, $original_path ), cho phép bạn thay đổi các URL liên kết đang được viết bởi hệ thống URL Drupal.

Ngoài ra hook_url_inbound_alter( &$path, $original_path, $path_language ), có thể tốt hơn vì nó bao gồm ngôn ngữ cụ thể của đường dẫn - nó phụ thuộc vào nơi bạn muốn thay đổi diễn ra. Cá nhân tôi thấy hook_url_outbound_alter()đáng tin cậy và đơn giản để làm việc với - nó thay đổi tất cả các URL thích hợp khi chúng được viết và sử dụng tùy chọn $, bạn có thể thêm và chỉnh sửa chuỗi truy vấn một cách đáng tin cậy (...? Query = string & foo = bar) và băm nhỏ (... #someId).

Sửa đổi đường dẫn $ và nó sẽ cập nhật đường dẫn thực tế được ghi vào URL href. Tất nhiên, điều này chạy trên tất cả các liên kết, vì vậy bạn sẽ muốn bắt đầu bằng cách kiểm tra xem đó có phải là liên kết bạn muốn sửa đổi không.

Nó được thực hiện trước khi răng cưa, vì vậy nó sẽ dựa trên mặc định của Drupal. Để đưa ra hai ví dụ rất đơn giản, nếu bạn chỉ muốn sửa đổi các đường dẫn phân loại:

function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
  if(strpos($original_path, 'taxonomy/term') === 0) {
    // do stuff
  }
}

Và / hoặc nếu bạn chỉ muốn nó chạy trên các trang cụ thể, ví dụ: các trang chỉnh sửa nút:

function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
  $current_path = explode("/", current_path() );
  if (count($current_path) >= 3 && $current_path[0] == "node" && $current_path[2] == "edit") {
    // do stuff
  }
}
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.