Obtenga la URL actual de Joomla

25

El siguiente código funciona en Joomla 1.6, pero arroja un error de estándares estrictos en 3.x:

Normas estrictas: solo las variables deben asignarse por referencia

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

    <?php echo $absolute_url; ?>

¿Cómo puedo hacer que el código funcione sin el error en Joomla 3.x?

RustyJoomla
fuente
Por cierto. no depende de la versión de Joomla sino de la versión de PHP. La asignación de las variables por referencia está en desuso en PHP
turson
3
Solo una nota para cualquiera que busque una respuesta para esto, para obtener la URL COMPLETA , no la use, JUri::current()ya que no devolverá ningún parámetro de consulta. Simplemente use lo que se describe en la respuesta aceptada a continuación: joomla.stackexchange.com/a/4295/168
Lodder

Respuestas:

36

ACTUALIZAR

La respuesta a la pregunta principal es: JFactory :: getUri () está en desuso, use JUri directamente así:

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

// or simpler:

echo JUri::getInstance();
?>

El error de los estándares estrictos se debe al &anterior JFactory::getURI();. Puede encontrar más información sobre eso a continuación.


RESPUESTA ORIGINAL

Eliminar el &

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

<?php echo $absolute_url; ?>

Con PHP5, el newoperador devuelve automáticamente una referencia, por lo que el '&' ya no es necesario.

Del manual oficial de PHP:

A partir de PHP 5, el nuevo operador devuelve una referencia automáticamente, por lo que la asignación del resultado de nuevo por resultados de referencia en un mensaje E_DEPRECATED en PHP 5.3 y posterior, y un mensaje E_STRICT en versiones anteriores.

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

Fruppel
fuente
mira mi respuesta aquí-> stackoverflow.com/questions/23702983/…
ezcodr
5

ACTUALIZACIÓN: JUri ahora también está en desuso. La forma correcta ahora es la siguiente:

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

Mensaje antiguo que ahora también está en desuso:

JFactory::getURI();es obsoleto. El método correcto para obtener la URL actual es:

$uri = JUri::getInstance();
echo  $uri->toString();
Søren Beck Jensen
fuente
0

Confiar en el toStringmétodo para obtener la URL actual es incorrecto. El toStringmétodo no está destinado a eso. El siguiente es un enfoque mejor, más limpio y a prueba de futuro para recuperar la URL actual:

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

Tenga en cuenta que el getFragmentmétodo debe devolver la parte después del signo de número, pero parece haber un error central que impide que lo haga.

itoctopus
fuente
Esto está mal. Se mostrará index.php&option=com_foo&view=bar. Debería ser ?despuésindex.php
Lodder
2
Es absolutamente legítimo usar toString. Es un método público y muy utilizado por la propia clase JUri. Incluso el comentario del método dice "Devuelve la cadena uri completa". Usando JFactory :: getUri (); está en desuso y definitivamente "más equivocado".
Fruppel