SITECORE MANIA 開発者向け技術ブログ

その他

駒形

駒形

サイトコアのアイテムURL取得の仕組みについて

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のバージョンによって実装されている機能が異なります。

この記事を読んだ人はこちらの記事も読んでます

Sitecore導入に関するご相談・資料ダウンロード

導入をご検討・ご依頼の方や、サービスについてご不明点がございましたらお気軽にお問い合わせください。

Sitecoreの運用問題を解決する

既にSitecoreを導入しているお客様向けサービス