Получить текущий URL Joomla

25

Следующий код работает в 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?

RustyJoomla
источник
Btw. это зависит не от версии Joomla, а от версии PHP. Присвоение переменных по ссылке в PHP устарело
turson
3
Просто обратите внимание на тех, кто ищет ответ для этого, чтобы получить полный URL, не используйте, JUri::current()поскольку он не будет возвращать какие-либо параметры запроса. Просто используйте то , что описано в общепринятом ответ ниже: joomla.stackexchange.com/a/4295/168
Лоддер
Лучше всего увидеть api doc api.joomla.org/cms-3/classes/Joomla.CMS.Uri.Uri.html
Анант,

Ответы:

36

ОБНОВИТЬ

Ответ на главный вопрос таков: JFactory :: getUri () устарела, используйте JUri напрямую следующим образом:

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

// or simpler:

echo JUri::getInstance();
?>

Strict Standards ошибка из-за &до того 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, оператор new возвращает ссылку автоматически, поэтому назначение результата new по ссылке приводит к сообщению E_DEPRECATED в PHP 5.3 и более поздних версиях и сообщению E_STRICT в более ранних версиях.

источник: http://php.net/manual/en/language.operators.assignment.php

fruppel
источник
см. мой ответ здесь-> stackoverflow.com/questions/23702983/…
ezcodr
8

Согласно руководству по Joomla , вы можете получить текущий URL с помощью этой функции:

JUri::current();
Ахмад Балавипур
источник
4
JUri :: current () возвращает текущий URI запроса без частей запроса или фрагмента . Например, если вы посещаете следующий URL: localhost / joomla3 / index.php / component / users /? View = Напомнить JUri :: current () вернет: localhost / joomla3 / index.php / component / users
fruppel
5

ОБНОВЛЕНИЕ: JUri теперь также устарело. Теперь правильный путь выглядит следующим образом:

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

Старое сообщение, которое теперь также устарело:

JFactory::getURI();не рекомендуется. Правильный метод получения текущего URL:

$uri = JUri::getInstance();
echo  $uri->toString();
Сорен Бек Дженсен
источник
0

Полагаться на 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метод должен возвращать деталь после знака числа, но, похоже, есть основная ошибка, которая не позволяет ему сделать это.

itoctopus
источник
Это не правильно. Это будет отображаться index.php&option=com_foo&view=bar. Это должно быть ?послеindex.php
Lodder
2
Абсолютно законно использовать toString. Это публичный метод, который активно используется самим классом JUri. Даже комментарий метода говорит: «Возвращает полную строку URI.». Использование JFactory :: getUri (); устарела и определенно «более неправильная».
Fruitppel