Получить текущий URL Joomla
Следующий код работает в Joomla 1.6, но он вызывает ошибку строгих стандартов в 3.x:
Строгие стандарты: только переменные должны назначаться по ссылке
//Get the full URL for sharing purposes
$uri = & JFactory::getURI();
$absolute_url = $uri->toString();
<?php echo $absolute_url; ?>
Как я могу заставить код работать без ошибки в Joomla 3.x?
4 ответа
UPDATE
Ответ на главный вопрос: JFactory :: getUri () устарел, используйте JUri следующим образом:
<?php
$uri = JUri::getInstance();
echo $uri->toString();
// or simpler:
echo JUri::getInstance();
?>
Ошибка Строгие стандарты связана с &
перед JFactory::getURI();
. Вы можете найти более подробную информацию об этом ниже.
ОРИГИНАЛЬНЫЙ ОТВЕТ
Удалите &
//Get the full URL for sharing purposes
$uri = JFactory::getURI();
$absolute_url = $uri->toString();
<?php echo $absolute_url; ?>
С PHP5 оператор new
автоматически возвращает ссылку, поэтому '&' больше не требуется.
Из официального руководства PHP:
Начиная с PHP 5, новый оператор автоматически возвращает ссылку, поэтому присвоение результата нового по ссылке приводит к сообщению E_DEPRECATED в PHP 5.3 и более поздних версиях и сообщению E_STRICT в более ранних версиях.
источник: http://php.net/manual/en/language. operators.assignment.php
В соответствии с учебником Joomla вы можете получить текущий URL-адрес с помощью этой функции:
JUri::current();
JFactory::getURI();
устарел. Правильный способ получения текущего URL-адреса:
$uri = JUri::getInstance();
echo $uri->toString();
Использование метода toString
для получения текущего URL-адреса неверно. Метод toString
для этого не предназначен. Ниже приведен лучший, более чистый и перспективный подход для извлечения текущего 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;
Обратите внимание, что метод getFragment
должен возвращать часть после знака числа, но, похоже, есть основная ошибка, которая мешает ей это делать.