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?


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

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


zobacz moją odpowiedź
tutaj-


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();

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.