Obtenha o URL atual do Joomla


25

O código a seguir funciona no Joomla 1.6, mas gera um erro de Padrões Estritos na 3.x:

Padrões estritos: Somente variáveis ​​devem ser atribuídas por referência

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

    <?php echo $absolute_url; ?>

Como faço para que o código funcione sem o erro no Joomla 3.x?


Btw. não depende da versão do Joomla, mas da versão do PHP. Atribuindo variáveis por referência é obsoleto em PHP
turson

3
Apenas uma observação para quem procura uma resposta para obter o URL COMPLETO , não use, JUri::current()pois ele não retornará nenhum parâmetro de consulta. Basta usar o que está descrito na resposta aceita abaixo: joomla.stackexchange.com/a/4295/168
Lodder

Respostas:


36

ATUALIZAR

A resposta para a pergunta principal é: JFactory :: getUri () está obsoleto, use JUri diretamente assim:

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

// or simpler:

echo JUri::getInstance();
?>

O erro dos padrões estritos é devido ao &antes JFactory::getURI();. Você pode encontrar mais informações sobre isso abaixo.


RESPOSTA ORIGINAL

Exclua o &

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

<?php echo $absolute_url; ?>

Com o PHP5, o newoperador retorna automaticamente uma referência, portanto o '&' não é mais necessário.

No manual oficial do PHP:

A partir do PHP 5, o novo operador retorna uma referência automaticamente, atribuindo o resultado de new por referência resulta em uma mensagem E_DEPRECATED no PHP 5.3 e posterior, e uma mensagem E_STRICT em versões anteriores.

fonte: http://php.net/manual/en/language.operators.assignment.php


Veja minha resposta aqui-> stackoverflow.com/questions/23702983/…
ezcodr


5

UPDATE: JUri agora também está obsoleto. A maneira correta agora é a seguinte:

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

Mensagem antiga que agora também está obsoleta:

JFactory::getURI();está obsoleto. O método correto para obter o URL atual é:

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

0

Confiar no toStringmétodo para obter o URL atual está errado. O toStringmétodo não se destina a isso. A seguir, é apresentada uma abordagem melhor, mais limpa e à prova de futuro para recuperar o URL atual:

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

Observe que o getFragmentmétodo deve retornar a peça após o sinal numérico, mas parece haver um bug principal que impede que isso seja feito.


Isto está errado. Será exibido index.php&option=com_foo&view=bar. Deve ser ?depois #index.php
Lodder 10/10

2
É absolutamente legítimo usar o toString. É um método público e muito usado pela própria classe JUri. Até o comentário do método diz "Retorna a string da uri completa". Usando JFactory :: getUri (); está obsoleto e definitivamente "mais errado".
Fruppel 10/10
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.