Отримайте поточну 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?


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, новий оператор повертає посилання автоматично, таким чином присвоюючи результат нового за допомогою посилання, отримує E_DEPRECATED повідомлення в PHP 5.3 та пізніших версіях та повідомлення E_STRICT у попередніх версіях.

джерело: http://php.net/manual/en/language.operators.assignment.php


см моя відповідь тут-> stackoverflow.com/questions/23702983 / ...
ezcodr

8

Відповідно до підручника Joomla , ви можете отримати поточну URL-адресу за цією функцією:

JUri::current();

4
JUri :: current () повертає поточний URI запиту без частини запиту чи фрагмента . Наприклад, якщо ви відвідаєте таку URL-адресу: localhost / joomla3 / index.php / компонент / users /? View = Нагадаємо JUri :: current () повернеться: localhost / joomla3 / index.php / компонент / 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метод повинен повернути частину після знака числа, але, здається, є основна помилка, яка заважає цьому робити.


Це неправильно. Він відобразиться index.php&option=com_foo&view=bar. Це повинно бути ?післяindex.php
Лодер

2
Це абсолютно законно використовувати toString. Це публічний метод і широко використовується самим класом JUri. Навіть коментар методу говорить "Повертає повний рядок uri." Використання JFactory :: getUri (); застаріла і, безумовно, "більше неправильна".
fruppel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.