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
}
}