Ruft die aktuelle Joomla-URL ab


25

Der folgende Code funktioniert in Joomla 1.6, löst jedoch einen Strict Standards-Fehler in 3.x aus:

Strenge Standards: Nur Variablen sollten per Referenz zugewiesen werden

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

    <?php echo $absolute_url; ?>

Wie kann ich den Code ohne den Fehler in Joomla 3.x zum Laufen bringen?


Btw. Es hängt nicht von der Joomla-Version ab, sondern von der PHP-Version. Das Zuweisen von Variablen per Referenz ist in PHP
turson

3
Nur eine Notiz an alle, die eine Antwort darauf suchen , um die vollständige URL zu erhalten, verwenden Sie diese nicht , JUri::current()da sie keine Abfrageparameter zurückgibt. Verwenden Sie einfach das, was in der akzeptierten Antwort unten beschrieben ist: joomla.stackexchange.com/a/4295/168
Lodder

Antworten:


36

AKTUALISIEREN

Die Antwort auf die Hauptfrage lautet: JFactory :: getUri () ist veraltet, verwenden Sie JUri direkt wie folgt:

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

// or simpler:

echo JUri::getInstance();
?>

Der Fehler bei den strengen Standards ist auf das &Vorher zurückzuführen JFactory::getURI();. Weitere Informationen dazu finden Sie weiter unten.


URSPRÜNGLICHE ANTWORT

Löschen Sie das &

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

<?php echo $absolute_url; ?>

Mit PHP5 gibt der newOperator automatisch eine Referenz zurück, so dass das '&' nicht mehr benötigt wird.

Aus dem offiziellen PHP-Handbuch:

Ab PHP 5 gibt der Operator new automatisch eine Referenz zurück. Das Zuweisen des Ergebnisses von new nach Referenz führt in PHP 5.3 und höher zu einer E_DEPRECATED-Nachricht und in früheren Versionen zu einer E_STRICT-Nachricht.

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


siehe meine antwort hier-> stackoverflow.com/questions/23702983/…
ezcodr


5

UPDATE: JUri ist jetzt auch veraltet. Der richtige Weg ist jetzt wie folgt:

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

Alte Nachricht, die jetzt auch veraltet ist:

JFactory::getURI();ist veraltet. Die richtige Methode zum Abrufen der aktuellen URL lautet:

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

0

Es toStringist falsch, sich auf die Methode zu verlassen, um die aktuelle URL abzurufen. Die toStringMethode ist dafür nicht vorgesehen. Das Folgende ist eine bessere, sauberere und zukunftssichere Methode zum Abrufen der aktuellen URL:

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

Beachten Sie, dass die getFragmentMethode das Teil nach dem Nummernzeichen zurückgeben sollte, aber es scheint einen Kernfehler zu geben, der dies verhindert.


Das ist falsch. Es wird angezeigt index.php&option=com_foo&view=bar. Es sollte ?nachindex.php
Lodder

2
Es ist absolut legitim, toString zu verwenden. Es ist eine öffentliche Methode, die von der JUri-Klasse selbst stark genutzt wird. Sogar der Methodenkommentar besagt "Gibt die vollständige Uri-Zeichenfolge zurück." Using JFactory :: getUri (); ist veraltet und definitiv "mehr falsch".
Fruppel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.