2009-03-31 13 views
45

Ho bisogno di prendere l'URL della pagina corrente in un sito Drupal. Non importa che tipo di contenuto sia - può essere qualsiasi tipo di nodo.Come ottenere l'URL completo di una pagina di Drupal?

NON sto cercando il percorso per il tema, o l'URL di base, o il get_destination di Drupal. Sto cercando una funzione o una variabile che mi darà la seguente integralmente:

http://example.com/node/number

con o senza (più probabile) il http://.

+0

drupal_get_destination è la soluzione dato che conosci il nome del dominio e se stai codificando per lo stesso dominio, puoi usarlo! –

+0

Correlati: [Come ottengo l'URL completo della pagina corrente?] (Http://drupal.stackexchange.com/q/27880/1908) a Drupal SE – kenorb

risposta

-1

Forse quello che vuoi è semplicemente delle vecchie variabili predefinite.

considerazione cercando

$_SERVER['REQUEST_URI''] 

o Leggi tutto here.

+1

questo dà/nodo/numero, vuole (http: //)mydrupalsite.com/node/number –

+0

Inoltre, il codice contiene un errore di sintassi. – kiamlaluno

53

drupal_get_destination() ha un codice interno che punta al punto corretto per il percorso interno corrente. Per tradurre quel percorso in un URL assoluto, la funzione url() dovrebbe fare il trucco. Se viene passata l'opzione "absolute", genererà l'URL completo, non solo il percorso interno. Scambierà anche in qualsiasi alias di percorso per il percorso corrente.

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

in base al link, drupal_get_destination() restituisce "destination =/node/number" o, per/node/number? Destination = bla, "destination = bla". passare questo a url() non sembra funzionare per me. –

+1

Doh. Hai ragione Ho aggiornato lo snippet con il codice corretto. Grazie! – Eaton

+0

Fresco, ma ho dovuto aggiungere: '$ echo link;' per un'applicazione Facebook per funzionare! Grazie! –

14

provare quanto segue:

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

Questo è un po 'più drupaly: url (current_path(), array (' absolute '=> true)); –

37

Questo è quello che ho trovato per essere utile

global $base_root; 
$base_root . request_uri(); 

stringhe di query restituisce ed è ciò che viene utilizzato nel nucleo: page_set_cache()

+1

Nota che questo metodo non funzionerà se il tuo sito non si trova nella radice del dominio. Ad esempio, se il tuo URL di base è http://example.com/folder, questo metodo genererà http://example.com/folder/folder/page. –

+0

Se questo è il caso, c'è un bug nel core. vedere che il codice commenta in http://api.drupal.org/api/drupal/includes!bootstrap.inc/function/conf_init/6 "Costruisci $ base_root (tutto fino alla prima barra dopo" schema: // ")." – mikeytown2

+0

Un'altra cosa che potrebbe causare problemi che stai vedendo se il tuo server web sta trasmettendo valori errati in $ _SERVER vedi http://api.drupal.org/api/drupal/includes!bootstrap.inc/ funzione/request_uri/6. – mikeytown2

19

Puoi anche farlo in questo modo:

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

È un po 'più veloce.

+5

Programmare sempre un'interfaccia non un'implementazione. – Rimian

12

Questo metodo tutto è vecchio metodo, in Drupal 7 che possiamo ottenere molto semplice

current_path() 

e un'altra funzione con piccola differenza

request_path() 
+0

La domanda riguarda l'ottenimento dell'URL * full *, i. e. qualcosa come 'http: // example.com/node/number'. –

4

Trovo che usare i token sia pulito. Si è integrato nel core di Drupal 7.

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

Token '[site: current-page: path]' dovrebbe funzionare entrambi. – kenorb

3

Quello che segue è più Drupal-ish:

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

Per Drupal 8 si può fare questo:

$url = 'YOUR_URL'; 
$url = \Drupal\Core\Url::fromUserInput('/' . $url, array('absolute' => 'true'))->toString(); 
Problemi correlati