【问题标题】:Sitecore Cross linking of assets in multiple sites多个站点中资产的 Sitecore 交叉链接
【发布时间】:2015-01-29 19:08:10
【问题描述】:

我在 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://site1/~media/site2/pdf/1.pdf

链接工作正常,但站点 2 文件由站点 1 域提供 我希望文件的 url 应该如下

http://site2/~media/site2/pdf/1.pdf

节点:我有一个自定义链接提供程序,它适用于跨站点的页面。

【问题讨论】:

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


    【解决方案1】:

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

    <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 生成的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多