使用Glass Mapper for Sitecore获取内部链接的绝对URL

时间:2014-01-19 15:08:17

标签: c# sitecore glass-mapper sitecore7.1

我的项目模板包含General Link的字段,并由以下类表示:

[SitecoreType]
public class MenuLink
{
    [SitecoreField(FieldName = "Link")]
    public virtual Link Link { get; set; }
}

现在我的链接字段包含外部和内部链接(指向其他项目的链接)。是否可以配置Glass Mapper Url属性Link包含绝对URL(如AlwaysIncludeServerUrl=true)?这也用于网站解析(SiteResolving=true)?

基本上我想给Link属性一个UrlOptions配置。

我正在Sitecore 7.1使用Glass.Mapper.Sc 3.1.2.18

3 个答案:

答案 0 :(得分:7)

凯文

请下载版本3.1.6我已将UrlOptions属性添加到SitecoreFieldAttribute类。您应该能够像这样强制服务器路径:

[SitecoreField(UrlOptions=SitecoreInfoUrlOptions.AlwaysIncludeServerUrl)]
public virtual Link MyLink{get;set;}

您还可以通过管道标志添加其他选项:

[SitecoreField(UrlOptions=SitecoreInfoUrlOptions.AlwaysIncludeServerUrl|SitecoreInfoUrlOptions.LanguageEmbeddingNever)]
public virtual Link MyLink{get;set;}

答案 1 :(得分:4)

您是否尝试将SitecoreField属性替换为:

[Glass.Mapper.Sc.Configuration.Attributes.SitecoreInfo(Type=Glass.Mapper.Sc.Configuration.SitecoreInfoType.Url,UrlOptions= Glass.Mapper.Sc.Configuration.SitecoreInfoUrlOptions.AlwaysIncludeServerUrl)]

我还没试过,但值得一试。

更新:此方法无法正常使用,请参阅迈克尔solution

答案 2 :(得分:3)

将此扩展方法添加到您的解决方案中:

using Sitecore;
using Sitecore.Links;
using Glass.Mapper.Sc.Fields;

public static class LinkExtensions
{
    public static string GetLinkUrl(this Link link, ISitecoreContext sitecoreContext = null)
    {
        if (link != null)
        {
            if (link.Type == LinkType.External || link.Type == LinkType.Media)
            {
                return link.Url;
            }
            else if (link.Type == LinkType.Internal)
            {
                var target = (sitecoreContext ?? new SitecoreContext()).Database.GetItem(new ID(link.TargetId));

                var urlOptions = Sitecore.Links.UrlOptions.DefaultOptions;
                urlOptions.AlwaysIncludeServerUrl = true;
                urlOptions.SiteResolving = true;

                return LinkManager.GetItemUrl(target, urlOptions);
            }
        }

        return string.Empty;
    }
}

然后,假设你有这个模型:

[SitecoreType]
public class MenuLink
{
    [SitecoreField(FieldName = "Link")]
    public virtual Link Link { get; set; }
}

您可以像这样获取网址:

model.Link.GetLinkUrl();