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?


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




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();

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.