it-swarm-es.tech

Obtenga la URL actual de Joomla

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?

24
RustyJoomla

[~ # ~] actualización [~ # ~]

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 ¡Normas estrictas se debe al & Antes de 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 operador new devuelve automáticamente una referencia, por lo que el '&' ya no es necesario.

Del manual oficial PHP manual:

A partir de PHP 5, el nuevo operador devuelve una referencia automáticamente, por lo que al asignar el 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

36
fruppel

De acuerdo con el tutorial de Joomla , puede obtener la URL actual mediante esta función:

JUri::current();
6
Ahmad Balavipour

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(); está en desuso. El método correcto para obtener la URL actual es:

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

Confiar en el método toString para obtener la URL actual es incorrecto. El método toString no está diseñado para 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 método getFragment debería devolver la parte después del signo de número, pero parece haber un error central que impide que lo haga.

0
itoctopus