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



我在 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 媒体文件和站点 1 媒体文件从站点 2,我可以停止此行为吗?

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

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

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

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

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

节点:I有一个自定义链接提供程序,它非常适合跨站点的页面。

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

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

相关内容

  • 没有找到相关文章

最新更新