私のモジュールでは、このコードを使用してページの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
これにはJRouteを使用します。
rtrim(JUri::base(), '/') . JRoute::_(ContentHelperRoute::getArticleRoute( $article->id, $article->catid ))
ただし、別のドメインにリンクしたくない場合は、JUri :: base()は必要ありません。
System:SEFと呼ばれるシステムプラグインがあります。このプラグインを有効にすると、ブラウザーに送信される直前に最終的なHTML出力がスキャンされ、JRoute::_($url);
を介して実行することにより、SEF以外のリンクが対応するSEFリンクに置き換えられます。これは_index.php
_で始まる内部リンクに対してのみ機能するため、リンクが_http://
_で始まる場合は機能しません。
JUri::base()
を削除してみて(リンクからhttp://を削除して)、プラグインが有効になっている場合は機能するはずです。
これは、サイトの正しいルート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 ));