Sitecoreの開発においてアイテムのURL取得は基礎的なタスクではありますが、
今回はURL生成のオプションと別ドメインにあるアイテムURL取得の流れを紹介していきたいと思います。
URL生成のオプション
「Sitecore.Links.LinkManager」クラスの「GetItemUrl」メソッドを使用して、対象となるアイテムからアイテムのURLを生成することとができます。
Sitecore.Links.LinkManager.GetItemUrl(Sitecore.Context.Item);
その際に、「ItemUrlBuilderOptions」クラスのプロパティを使用してオプションを指定することができます。主要なオプションについて紹介します。
プロパティ |
概要 |
AlwaysIncludeServerUrl |
URL にHTTPプロトコルとドメイン(http://localhost)を含める場合はtrue、相対URLが必要な場合はfalseにします。
|
Language |
アイテムの言語を指定できます。 |
LanguageEmbedding |
URLに言語名を埋め込むかどうかを指定します。デフォルトではasNeededとなっており、always、neverが指定できます。
表示例:/ja-JP/home/testpage
|
LanguageLocation |
言語をURLパスまたはクエリ文字列のどちらに配置するかを指定します。オプションはfilePathまたはqueryStringが選択できます。デフォルトではfilePathです。
queryStringの表示例:/home/testpage?sc_lang=ja-JP
|
UseDisplayName |
アイテムの表示名を使用するかを指定できます。 |
SiteResolving |
サイト解決を有効にするかどうかを指定します。デフォルトではfalseになっています。 |
Site |
configで設定されたサイトを指定できます。 |
例として以下のようにオプションを指定して使用できます。
Item item = Sitecore.Context.Item;
ItemUrlBuilderOptions urlOptions = new ItemUrlBuilderOptions
{
//サーバのURLを含める
AlwaysIncludeServerUrl = true,
//サイトを指定する
Site = Sitecore.Sites.SiteContext.GetSite("test_website_name"),
//言語がクエリに配置されるようにする
LanguageLocation = LanguageLocation.QueryString,
};
string url = Sitecore.Links.LinkManager.GetItemUrl(item,urlOptions);
また、メディアアイテムのURLを取得するには、「MediaManager.GetMediaUrl」メソッドを使用する必要があります。
こちらも「LinkManager」と同様に、「MediaUrlBuilder」を使用してオプションを指定することができますが、 詳細なオプションの紹介については、今回は省かせてもらいます。
アイテムのURL取得の流れ
「LinkManager」がアイテムのURLを取得する際には、configのサイト設定から目的のサイトを特定し、URLを生成します。
「LinkManager」がリンクされたアイテムのWebサイトを判別でき、
そのサイトがコンテキストサイトではなく、そのサイトの「targetHostName」属性に値がある場合、「LinkManager」は「targetHostName」属性を使用します。
「targetHostName」とは、別のサイトのコンテキストからこのサイト内のアイテムへのURLを生成するときに使用するホスト名です。
この属性は、サイト解決の設定値である「Rendering.SiteResolving」がtrueの場合に使用されます。
<site name="test_website_name"
hostName="www.test-website.com"
targetHostName="www.test-website.com"
virtualFolder="/ja-jp"
physicalFolder="/ja-jp"
rootPath="/sitecore/content/Japan"
startItem="/home"
language="ja-JP"
database="web"
domain="extranet"
allowDebug="true"
cacheHtml="true"
htmlCacheSize="10MB"
enablePreview="true"
enableDebugger="true" />
上記のようなサイト設定があり、「/sitecore/content/Japan/home/」配下にあるアイテムのURLを取得する場合、
https://www.test-website.com/ja-jp/{対象のアイテムパス}
のようなURLが生成されます。
また、Sitecoreでは、定義されたサイト設定をリストの上からの順序でサイトをチェックするので注意が必要です。例えば、APIなどで「SiteContext」がなくサイトを指定していない場合には、間違ったドメインのURLが取得されてしまうことがあります。なので、一意のサイトからURLを取得する場合であれば、「ItemUrlBuilderOptions」の「Site」プロパティでサイトを指定する必要があります。もしくは、SitecoreのURLクエリパラメータである「sc_site」を使用してサイトを指定するといったこともできます。
以上になります。
※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。