Obtenez l'URL Joomla actuelle

25

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 affecté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?

RustyJoomla
la source
Btw. cela ne dépend pas de la version de Joomla mais de la version PHP. L'affectation de variables par référence est déconseillée en PHP
turson
3
Juste une note pour quiconque cherche une réponse à cela, pour obtenir l' URL COMPLÈTE , ne l' utilisez pasJUri::current() car elle ne renverra aucun paramètre de requête. Utilisez simplement ce qui est décrit dans la réponse acceptée ci-dessous: joomla.stackexchange.com/a/4295/168
Lodder
Mieux vaut
Anant

Réponses:

36

MISE À 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 à l' &avant JFactory::getURI();. Vous pouvez trouver 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' newopérateur retourne automatiquement une référence, donc le '&' n'est plus nécessaire.

Depuis le manuel PHP officiel:

Depuis PHP 5, le nouvel opérateur renvoie automatiquement une référence, donc l'attribution du résultat de new by reference entraîne un message E_DEPRECATED en PHP 5.3 et supérieur, et un message E_STRICT dans les versions antérieures.

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

fruppel
la source
voir ma réponse ici-> stackoverflow.com/questions/23702983/…
ezcodr
5

MISE À JOUR: JUri est désormais également obsolète. La bonne façon est maintenant la suivante:

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

Ancien message désormais obsolète:

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

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

Se fier à la toStringméthode pour obtenir l'URL actuelle est faux. La toStringméthode n'est pas destinée à cela. Ce qui suit est une approche meilleure, plus propre et à l'épreuve du temps pour récupérer 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 getFragmentméthode doit renvoyer la partie après le signe numérique, mais il semble y avoir un bogue de base qui l'empêche de le faire.

Itoctopus
la source
C'est faux. Il s'affichera index.php&option=com_foo&view=bar. Ça devrait être ?aprèsindex.php
Lodder
2
C'est absolument légitime d'utiliser toString. C'est une méthode publique et largement utilisée par la classe JUri elle-même. Même le commentaire de la méthode indique "Renvoie la chaîne uri complète". Utilisation de JFactory :: getUri (); est obsolète et définitivement "plus faux".
fruppel