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?
[~ # ~] 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
Selon le tutoriel Joomla , vous pouvez obtenir l'URL actuelle par cette fonction:
JUri::current();
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();
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.