2009-03-31 43 views
45

Tôi cần phải lấy URL của trang hiện tại trên trang web Drupal. Không quan trọng loại nội dung là gì - có thể là bất kỳ loại nút nào.Cách lấy URL đầy đủ của trang Drupal?

Tôi KHÔNG tìm đường dẫn đến chủ đề hoặc url cơ sở hoặc get_destination của Drupal. Tôi đang tìm kiếm một chức năng hoặc biến mà sẽ cung cấp cho tôi những điều sau đây trong đầy đủ:

http://example.com/node/number

Hoặc có hoặc không có (nhiều khả năng) các http://.

+0

drupal_get_destination là giải pháp vì bạn biết tên miền và nếu bạn đang mã hóa cho cùng một tên miền, bạn có thể sử dụng nó! –

+0

Liên quan: [Làm thế nào để tôi nhận được URL đầy đủ của trang hiện tại?] (Http://drupal.stackexchange.com/q/27880/1908) tại Drupal SE – kenorb

Trả lời

-1

Có thể những gì bạn muốn chỉ là các biến được xác định trước cũ.

xem xét cố gắng

$_SERVER['REQUEST_URI''] 

Hoặc đọc thêm here.

+1

điều này cho phép/nút/số, anh ta muốn (http: //)mydrupalsite.com/node/number –

+0

Ngoài ra, mã chứa lỗi cú pháp. – kiamlaluno

53

drupal_get_destination() có một số mã nội bộ trỏ vào vị trí chính xác để lấy đường dẫn nội bộ hiện tại. Để dịch đường dẫn đó thành URL tuyệt đối, hàm url() sẽ thực hiện thủ thuật. Nếu tùy chọn 'tuyệt đối' được truyền vào nó sẽ tạo ra URL đầy đủ, không chỉ là đường dẫn nội bộ. Nó cũng sẽ trao đổi trong bất kỳ bí danh đường dẫn nào cho đường dẫn hiện tại.

$path = isset($_GET['q']) ? $_GET['q'] : '<front>'; 
$link = url($path, array('absolute' => TRUE)); 
+1

theo liên kết của bạn, drupal_get_destination() trả về "đích =/nút/số" hoặc, cho/nút/số? Đích = bla, "đích = bla". chuyển url này đến url() dường như không hoạt động với tôi. –

+1

Doh. Bạn hoàn toàn đúng. Tôi đã cập nhật đoạn mã với mã đúng. Cảm ơn! – Eaton

+0

Cool, nhưng tôi phải thêm: '$ echo link;' để ứng dụng facebook hoạt động! Cảm ơn! –

14

Hãy thử như sau:

url($_GET['q'], array('absolute' => true)); 
+2

Đây là một chút drupaly hơn: url (current_path(), mảng ('tuyệt đối' => true)); –

37

Đây là những gì tôi tìm thấy là hữu ích

global $base_root; 
$base_root . request_uri(); 

chuỗi Returns truy vấn và đó là những gì được sử dụng trong lõi: page_set_cache()

+1

Lưu ý rằng phương pháp này sẽ không hoạt động nếu trang web của bạn không nằm trong miền gốc. Ví dụ: nếu URL cơ sở của bạn là http://example.com/folder, phương pháp này sẽ dẫn đến http://example.com/folder/folder/page. –

+0

Nếu đó là trường hợp thì có một lỗi trong lõi. thấy rằng các chú thích mã trong http://api.drupal.org/api/drupal/includes!bootstrap.inc/function/conf_init/6 "Xây dựng $ base_root (mọi thứ cho đến khi dấu gạch chéo đầu tiên sau" lược đồ: // ")." – mikeytown2

+0

Một điều khác có thể gây ra các sự cố mà bạn thấy nếu máy chủ web của bạn truyền các giá trị sai cho $ _SERVER, hãy xem http://api.drupal.org/api/drupal/includes!bootstrap.inc/ function/request_uri/6. – mikeytown2

19

Bạn có thể cũng làm theo cách này:

$current_url = 'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 

Nhanh hơn một chút.

+5

Luôn lập trình để giao diện không phải là triển khai. – Rimian

12

Phương pháp này tất cả là phương pháp cũ, trong drupal 7, chúng tôi có thể lấy nó rất đơn giản

current_path() 

và một chức năng với sự khác biệt nhỏ

request_path() 
+0

Câu hỏi đặt ra là nhận được URL * đầy đủ *, i. e. một cái gì đó như 'http: // example.com/node/number'. –

4

Tôi thấy sử dụng mã thông báo khá sạch sẽ. Nó được tích hợp vào lõi trong Drupal 7.

<?php print token_replace('[current-page:url]'); ?> 
+0

Mã thông báo '[site: current-page: path]' cũng hoạt động. – kenorb

3

Sau đây là nhiều Drupal-ish:

url(current_path(), array('absolute' => true)); 
0

Đối với Drupal 8 bạn có thể làm điều này:

$url = 'YOUR_URL'; 
$url = \Drupal\Core\Url::fromUserInput('/' . $url, array('absolute' => 'true'))->toString(); 
Các vấn đề liên quan