Uzyskaj aktualny adres URL Joomla

25

Poniższy kod działa w Joomla 1.6, ale powoduje błąd Strict Standards w 3.x:

Ścisłe standardy: tylko zmienne powinny być przypisywane przez odniesienie

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

    <?php echo $absolute_url; ?>

Jak mogę sprawić, aby kod działał bez błędu w Joomla 3.x?

RustyJoomla
źródło
Btw. to nie zależy od wersji Joomla, ale od wersji PHP. Przypisywanie zmiennych przez odniesienie jest przestarzałe w PHP
turson
3
Uwaga dla każdego, kto szuka odpowiedzi na to pytanie, aby uzyskać PEŁNY URL, nie używaj JUri::current()go, ponieważ nie zwróci żadnych parametrów zapytania. Wystarczy użyć tego, co opisano w zaakceptowanej odpowiedzi poniżej: joomla.stackexchange.com/a/4295/168
Lodder
Najlepiej zobaczyć api doc api.joomla.org/cms-3/classes/Joomla.CMS.Uri.Uri.html
Anant

Odpowiedzi:

36

AKTUALIZACJA

Odpowiedź na główne pytanie brzmi: JFactory :: getUri () jest przestarzałe, użyj JUri bezpośrednio tak:

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

// or simpler:

echo JUri::getInstance();
?>

Strict Standards błąd jest ze względu na &wcześniej JFactory::getURI();. Więcej informacji na ten temat znajdziesz poniżej.


ORYGINALNA ODPOWIEDŹ

Usuń &

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

<?php echo $absolute_url; ?>

W PHP5 newoperator automatycznie zwraca referencję, więc „&” nie jest już potrzebne.

Z oficjalnej instrukcji PHP:

Począwszy od PHP 5, nowy operator automatycznie zwraca referencję, więc przypisanie wyniku nowej przez referencję skutkuje komunikatem E_DEPRECATED w PHP 5.3 i nowszych oraz komunikatem E_STRICT we wcześniejszych wersjach.

źródło: http://php.net/manual/en/language.operators.assignment.php

fruppel
źródło
zobacz moją odpowiedź
tutaj-
8

Zgodnie z samouczkiem Joomla możesz uzyskać bieżący adres URL za pomocą tej funkcji:

JUri::current();
Ahmad Balavipour
źródło
4
JUri :: current () zwraca bieżący identyfikator URI żądania bez części zapytania lub fragmentu . Na przykład, jeśli odwiedzisz następujący adres URL: localhost / joomla3 / index.php / component / users /? View = przypomnij, że JUri :: current () zwróci: localhost / joomla3 / index.php / component / users
fruppel
5

AKTUALIZACJA: JUri jest teraz również przestarzała. Prawidłowy sposób jest teraz następujący:

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

Stara wiadomość, która jest teraz nieaktualna:

JFactory::getURI();jest przestarzałe. Prawidłowa metoda uzyskania bieżącego adresu URL to:

$uri = JUri::getInstance();
echo  $uri->toString();
Søren Beck Jensen
źródło
0

Poleganie na toStringmetodzie uzyskania bieżącego adresu URL jest nieprawidłowe. toStringMetoda ta nie jest przeznaczona do tego. Poniżej przedstawiono lepsze, czystsze i przyszłościowe podejście do pobierania bieżącego adresu URL:

$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;

Zauważ, że getFragmentmetoda powinna zwrócić część po znaku liczbowym, ale wydaje się, że istnieje podstawowy błąd, który temu uniemożliwia.

itoctopus
źródło
To jest źle. Wyświetli się index.php&option=com_foo&view=bar. Powinno być ?późniejindex.php
Lodder
2
Korzystanie z narzędzia toString jest całkowicie uzasadnione. Jest to metoda publiczna i często używana przez samą klasę JUri. Nawet komentarz do metody mówi „Zwraca pełny ciąg znaków uri”. Korzystanie z JFactory :: getUri (); jest przestarzałe i zdecydowanie „bardziej błędne”.
fruppel 10.10.16