web-dev-qa-db-fra.com

Obtenir l'URL actuelle de Joomla

Le code suivant fonctionne dans Joomla 1.6, mais il génère une erreur Strict Standards dans 3.x:

Normes strictes: seules les variables doivent être attribuées par référence

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

    <?php echo $absolute_url; ?>

Comment puis-je faire fonctionner le code sans l'erreur dans Joomla 3.x?

24
RustyJoomla

[~ # ~] met à jour [~ # ~]

La réponse à la question principale est: JFactory :: getUri () est obsolète, utilisez JUri directement comme ceci:

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

// or simpler:

echo JUri::getInstance();
?>

L'erreur Strict Standards est due au & Avant JFactory::getURI();. Vous trouverez plus d'informations à ce sujet ci-dessous.


RÉPONSE ORIGINALE

Supprimer le &

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

<?php echo $absolute_url; ?>

Avec PHP5, l'opérateur new renvoie automatiquement une référence, le '&' n'est donc plus nécessaire.

De l’officiel PHP manuel:

À partir de PHP 5, l'opérateur new retourne une référence automatiquement. Par conséquent, si vous assignez le résultat de new by reference à un message E_DEPRECATED dans PHP 5.3 et versions ultérieures, et un message E_STRICT dans les versions antérieures.

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

36
fruppel

Selon le tutoriel Joomla , vous pouvez obtenir l'URL actuelle par cette fonction:

JUri::current();
6
Ahmad Balavipour

PDATE:JUri est maintenant également obsolète. La bonne façon de procéder est la suivante:

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

Ancien message désormais obsolète:

JFactory::getURI(); est obsolète. La méthode correcte pour obtenir l'URL actuelle est la suivante:

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

S'appuyer sur la méthode toString pour obtenir l'URL actuelle est erroné. La méthode toString n'est pas faite pour ça. Voici une approche plus efficace, plus propre et évolutive pour extraire l'URL actuelle:

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

Notez que la méthode getFragment devrait renvoyer la partie après le signe numérique, mais il semble y avoir un bogue principal qui l’empêche de le faire.

0
itoctopus