web-dev-qa-db-ja.com

現在のJoomla URLを取得する

次のコードはJoomla 1.6で機能しますが、3.xでStrict Standardsエラーをスローします。

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

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

    <?php echo $absolute_url; ?>

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

25
RustyJoomla

[〜#〜]更新[〜#〜]

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

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

// or simpler:

echo JUri::getInstance();
?>
_

Strict Standardsエラーは、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 by参照の結果を割り当てると、PHP 5.3以降でE_DEPRECATEDメッセージが返されます。以前のバージョンではE_STRICTメッセージ。

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

37
fruppel

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

JUri::current();
8

PDATE:JUriも廃止されました。正しい方法は次のとおりです。

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

現在は非推奨となっている古いメッセージ:

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

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

現在のURLを取得するためにtoStringメソッドを使用することは間違っています。 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メソッドは番号記号の後ろの部分を返す必要がありますが、それを実行できないようにするコアバグがあるようです。

0
itoctopus