Ottieni l'URL Joomla corrente


25

Il seguente codice funziona in Joomla 1.6, ma genera un errore Strict Standards in 3.x:

Standard rigorosi: solo le variabili devono essere assegnate per riferimento

    //Get the full URL for sharing purposes
    $uri = & JFactory::getURI();
    $absolute_url = $uri->toString();

    <?php echo $absolute_url; ?>

Come posso far funzionare il codice senza l'errore in Joomla 3.x?


Btw. non dipende dalla versione di Joomla ma dalla versione di PHP. L'assegnazione delle variabili per riferimento è obsoleta in PHP
turson,

3
Basta una nota a chiunque cerchi una risposta per questo, per ottenere l' URL COMPLETO , non usarlo JUri::current()in quanto non restituirà alcun parametro di query. Usa semplicemente ciò che è descritto nella risposta accettata di seguito: joomla.stackexchange.com/a/4295/168
Lodder

Risposte:


36

AGGIORNARE

La risposta alla domanda principale è: JFactory :: getUri () è deprecato, usa JUri direttamente in questo modo:

<?php 
$uri = JUri::getInstance(); 
echo $uri->toString();

// or simpler:

echo JUri::getInstance();
?>

L' errore degli standard rigorosi è dovuto al &precedente JFactory::getURI();. Di seguito puoi trovare ulteriori informazioni al riguardo.


RISPOSTA ORIGINALE

Elimina il &

//Get the full URL for sharing purposes
$uri = JFactory::getURI();
$absolute_url = $uri->toString();

<?php echo $absolute_url; ?>

Con PHP5 l' newoperatore restituisce automaticamente un riferimento, quindi "&" non è più necessario.

Dal manuale ufficiale di PHP:

A partire da PHP 5, il nuovo operatore restituisce automaticamente un riferimento, quindi assegnando il risultato di new in base ai risultati di riferimento in un messaggio E_DEPRECATED in PHP 5.3 e versioni successive e un messaggio E_STRICT nelle versioni precedenti.

fonte: http://php.net/manual/en/language.operators.assignment.php


vedi la mia risposta qui-> stackoverflow.com/questions/23702983/...
ezcodr


5

AGGIORNAMENTO: JUri ora è anche deprecato. Il modo corretto ora è il seguente:

$uri = Joomla\CMS\Uri\Uri::getInstance();
echo  $uri->toString();

Vecchio messaggio che ora è anche deprecato:

JFactory::getURI();è deprecato. Il metodo corretto per ottenere l'URL corrente è:

$uri = JUri::getInstance();
echo  $uri->toString();

0

Affidarsi al toStringmetodo per ottenere l'URL corrente è sbagliato. Il toStringmetodo non è pensato per questo. Di seguito è riportato un approccio migliore, più pulito e a prova di futuro per recuperare l'URL corrente:

$objJURI = JFactory::getURI();
$strQuery = '';
if (!empty($objJURI->getQuery()))
    $strQuery = '?'.$objJURI->getQuery();
$strFragment = '';
if ((!empty($objJURI->getFragment())) && ($objJURI->getFragment() != '#'))
    $strFragment = $objJURI->getFragment();
$currentURL = $objJURI->current().$strQuery.$strFragment;

Si noti che il getFragmentmetodo dovrebbe restituire la parte dopo il segno numerico, ma sembra che ci sia un bug di base che gli impedisce di farlo.


Questo è sbagliato. Verrà visualizzato index.php&option=com_foo&view=bar. Dovrebbe essere ?dopoindex.php
Lodder,

2
È assolutamente legittimo utilizzare toString. È un metodo pubblico e ampiamente utilizzato dalla stessa classe JUri. Anche il commento del metodo dice "Restituisce la stringa uri completa". Utilizzando JFactory :: getUri (); è deprecato e sicuramente "più sbagliato".
fruppel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.