web-dev-qa-db-ja.com

JRouteでの絶対SEF URL

JRoute で正しい絶対SEF URLを取得できない理由を理解しようとしています。

私はこれで試しました:

_JRoute::_(JUri::root().'index.php?Itemid=164')
_

しかしそれは正しくSEFレンダリングしません、それはこのように印刷されます

_http://mysite.com/index.php?Itemid=164` 
_

JUri::root()の部分を削除すると、正しくレンダリングされますが、相対URLとして表示されます。

なにか提案を?何が悪いのですか?私はドキュメントから誤解していますか

_(string $url, boolean $xhtml = true, integer $ssl = null) : string

引数

_$url_:Joomlaリソースへの絶対または相対URI。

1
Gruber

あなたはこの方法を試すことができます:

_$itemid = 164;
$application = JFactory::getApplication();
$menu = $application->getMenu();
$item = $menu->getItem( $itemid );
$link = new JURI( $item->link );
$link->setVar( 'ItemId', $itemid );

echo JRoute::_( $quoteLink, true, -1 ); ?>
_


JRouteのドキュメントから:

ルーティングURL **

_JRoute::__メソッドは、内部Joomla!カスタムURLへのURL。 _JRoute::__には3つのパラメーターがあり、そのプロトタイプは次のとおりです。

JRoute::_($url, $xhtml = true, $ssl = null);

どこ:

$ urlは、絶対または相対内部Joomla!を含む文字列です。 URL。

$ xhtmlは、出力がXHTMLであるかどうかを指定するブール値です。このパラメーターはオプションであり、省略した場合のデフォルトはtrueです。

$ sslは、URIを保護する必要があるかどうかを指定する整数値です。グローバルセキュアサイトURIを使用してURIを強制的に保護するには1に設定し、渡されたときと同じ状態のままにするには0に設定し、グローバル非セキュアサイトURIを使用してURIを強制的に非セキュアにするには-1に設定する必要があります。

このドキュメントからは明らかではありませんが、_**$ssl = -1**_を使用すると http://joomlasite.com のような安全でないURIが強制されます

コメントの更新:

別のオプションは次のとおりです。

_echo JUri::root() . trim( JRoute::_( $quoteLink ), '/' );
_

少し"hacky"ですが、機能します...;)

1
FFrewin

適切な方法を使用して完全なURLを取得することもできます。

$config = JFactory::getConfig();
$mode = $config->get('force_ssl', 0) == 2 ? 1 : (-1);
echo JRoute::_('index.php?Itemid=164',false,$mode);
1
bharat

ルーターのコードを見ると次のような理由で、これを実現することはできません。

index.phpで始まるリンクは、httpではなく渡す必要があります

ルーティングを実現する正しい方法は次のとおりです。

JRoute::_('index.php?Itemid=164')

絶対sef URLが必要な場合は、後にrootを前に付ける必要があります。

JUri::root().JRoute::_('index.php?Itemid=164')
1
Alexandr