5

我的项目模板有一个字段 aGeneral 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.

4

3 回答 3

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;}
于 2014-01-20T22:44:19.487 回答
4

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

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

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

更新:此方法无法正常工作,请参考迈克尔解决方案

于 2014-01-19T17:04:41.360 回答
4

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

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; }
}

您可以像这样获取 URL:

model.Link.GetLinkUrl();
于 2014-01-19T17:10:51.997 回答