Sitecore交叉链接多个站点中的资产

时间:2015-01-29 00:40:36

标签: cross-domain sitecore media sitecore7 sitecore-media-library

我在Sitecore 7中有以下树结构

Content
    Site 1
        page 1
    Site 2
        page 1
Media Library
    Site 1 media files
        pdf
            1.pdf
    Site 2 media files
        pdf
            1.pdf

媒体库是一个共享库,看起来用户可以访问来自站点1的站点2媒体文件和来自站点2的站点1媒体文件,我可以停止此行为吗?

我想如果我从网站1页面引用网站2文件,生成的链接应该从网站2域打开它们。

例如当前如果我正在浏览站点1的第1页并且链接到站点2的1.pdf,则会生成以下链接

的http:// 站点1 /~media/site2/pdf/1.pdf

链接正常工作但站点1域正在提供站点2文件 我想文件的url应该如下

的http:// 站点2 /~media/site2/pdf/1.pdf

节点:我有一个自定义链接提供程序,对于网站上的页面非常有效。

1 个答案:

答案 0 :(得分:0)

您可以创建自定义媒体提供程序并注册它而不是默认的:

<mediaLibrary>
  <mediaProvider type="My.Assembly.Namespace.CustomMediaProvider, My.Assembly" />
</mediaLibrary>
public class CustomMediaProvider : MediaProvider
{
    public override string GetMediaUrl(MediaItem item, MediaUrlOptions options)
    {
        string mediaUrl = base.GetMediaUrl(item, options);
        if (mediaUrl == null || mediaUrl.StartsWith("http"))
        {
            return mediaUrl;
        }

        string[] parts = mediaUrl.Split(new[] {'/'}, StringSplitOptions.RemoveEmptyEntries);
        if (parts.Length > 2)
        {
            // skip "~" and "media" parts
            string mediaLibraryTopFolder = parts[2];

            // assuming that folder names are site1 and site2
            SiteInfo siteInfo = SiteContextFactory.GetSiteInfo(mediaLibraryTopFolder);

            if (siteInfo != null)
            {
                SiteContext siteContext = new SiteContext(siteInfo);
                // change logic if you need https
                mediaUrl = "http://" + siteContext.HostName + "/" + mediaUrl.TrimStart('/');
            }
        }

        return mediaUrl;
    }
}

此代码未经过测试,但如果媒体项链接尚未包含主机名,则应从媒体路径获取顶级文件夹,获取与文件夹名称相同的站点,并在路径的开头。

请注意,这会更改您的所有媒体链接,因此它们将包含http和主机名,并且这仅适用于MediaManagerMediaProvider生成的链接。