web-dev-qa-db-ja.com

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

私のモジュールでは、このコードを使用してページの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
7
rleathers

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

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

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

13
Harald Leithner

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

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

4
Don Gilbert

これは、サイトの正しいルート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 ));
3
Ramesh Elamathi