実際のURLではなくカスタムモジュールでSEF URLを生成するにはどうすればよいですか?


7

私のモジュールでは、このコードを使用してページのURLを生成しています。

JURI::base() . ContentHelperRoute::getArticleRoute(  $article->id,  $article->catid )

これは正常に機能し、次のようなURLを生成します。

http://example.com/index.php?option=com_content&view=article&id=83&catid=26&Itemid=162

しかし、現在のページのSEF URLを生成するモジュールを取得する方法があるかどうか知りたいのですが。何かのようなもの:

http://example.com/resources/blog/83-illustration

回答:


13

これにはJRouteを使用します。

rtrim(JUri::base(), '/') . JRoute::_(ContentHelperRoute::getArticleRoute(  $article->id,  $article->catid ))

ただし、別のドメインにリンクしない場合は、JUri :: base()は必要ありません。


1
これは、働いていたと「答え」が、新しい、SEF URLは、ドメイン名の後に2つのスラッシュがある理由は、私が思っていたように私はそれを行います bite-sized-joomla.com//our-work/illustration-photography/...
rleathers

3
その理由は、JUri :: base()が末尾に「/」を付けた完全なURIを返すためです。JRouteは、先頭に「/」が付いた絶対URIを返します。回答を編集します。
Harald Leithner 2014

1
スラッシュはJUri :: base()の出力の最後にあるので、rtrim(JUri::base(), '/')...代わりにlf ltrim(JUri::base(), '/')...を使用する必要があります。
ベンジャミンレイ

正解だと思います。答えを更新しました。
Harald Leithner 16

4

System:SEFと呼ばれるシステムプラグインがあります。このプラグインを有効にすると、ブラウザーに送信される直前に最終的なHTML出力がスキャンされ、を介して実行することにより、非SEFリンクがSEFリンクに置き換えられますJRoute::_($url);。これはで始まるものの内部リンクでのみ機能するためindex.php、リンクがで始まる場合は機能しませんhttp://

削除してみてくださいJUri::base()(リンクからhttp://を削除してください)。プラグインが有効になっている場合は機能します。


3

これは、サイトの正しいルートURLを取得する別の方法です。これは、サイトがサブフォルダーにある場合にも注意します

$rootURL = rtrim(JURI::base(),'/');
        $subpathURL = JURI::base(true);
        if(!empty($subpathURL) && ($subpathURL != '/')) {
            $rootURL = substr($rootURL, 0, -1 * strlen($subpathURL));
        }

その後、あなたは行うことができます

$url = $rootURL.JRoute::_(ContentHelperRoute::getArticleRoute(  $article->id,  $article->catid ));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.