現在のJoomla URLを取得します


25

次のコードはJoomla 1.6で動作しますが、3.xでは厳格な標準エラーがスローされます。

厳格な基準:変数のみを参照により割り当てる必要があります

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

    <?php echo $absolute_url; ?>

Joomla 3.xでエラーなしでコードを機能させるにはどうすればよいですか?


ところで Joomlaのバージョンではなく、PHPのバージョンに依存しています。参照することにより、変数の割り当ては、PHPで廃止されました
turson

3
完全な URL を取得するために、これに対する答えを探している人へのメモだけで、クエリパラメータを返さないので使用しないでJUri::current()ください。単に以下の受け入れ答えに記載されているものを使用します。joomla.stackexchange.com/a/4295/168
Lodder

回答:


36

更新

主な質問に対する答えは次のとおりです。JFactory:: getUri()は非推奨です。JUriを次のように直接使用します。

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

// or simpler:

echo JUri::getInstance();
?>

厳しい基準誤差があるためである&前にJFactory::getURI();。詳細については、以下をご覧ください。


元の回答

&を削除します

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

<?php echo $absolute_url; ?>

PHP5では、new演算子は自動的に参照を返すため、「&」はもう必要ありません。

公式のPHPマニュアルから:

PHP 5以降、new演算子は参照を自動的に返すため、参照によるnewの結果を割り当てると、PHP 5.3以降ではE_DEPRECATEDメッセージが、以前のバージョンではE_STRICTメッセージが返されます。

ソース:http : //php.net/manual/en/language.operators.assignment.php


ここで私の答えを参照してください-> stackoverflow.com/questions/23702983/…–
ezcodr

8

Joomlaチュートリアルによるとこの関数により現在のURLを取得できます:

JUri::current();

4
JUri :: current()は、クエリまたはフラグメント部分なしで現在のリクエストURI 返します。たとえば、次のURLにアクセスすると: localhost / joomla3 / index.php / component / users /?view = remind JUri :: current()は以下を返します。localhost / joomla3 / index.php / component / users
fruppel

5

UPDATE: JUriも非推奨になりました。正しい方法は次のとおりです。

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

廃止された古いメッセージ:

JFactory::getURI();非推奨です。現在のURLを取得する正しい方法は次のとおりです。

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

0

toStringメソッドに依存して現在のURLを取得するのは間違っています。toStringこの方法は、そのためのものではありません。以下は、現在の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;

getFragmentメソッドは番号記号の後の部分を返す必要があることに注意してください。ただし、それを実行できないコアのバグがあるようです。


これは間違っています。表示されますindex.php&option=com_foo&view=bar。それの?後でなければなりませんindex.php
Lodder

2
toStringを使用するのは絶対に合法です。そのパブリックメソッドであり、JUriクラス自体によって頻繁に使用されます。メソッドのコメントでさえ、「完全なURI文字列を返します」と書かれています。JFactory :: getUri();を使用する 非推奨であり、間違いなく「より間違っています」。
フラップ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.