DD4T和动态链接

Nei*_*eil 3 tridion

使用DD4T在视图中动态解析组件链接 - 不在使用的富文本字段中ResolveRichText()- 但如果组件A具有组件链接字段,其中包含指向组件B的链接,并且在视图中要发布页面组件B的URL,则会发布该组件链接. ..

在解决方案中没有这方面的帮助 - 是吗?

ASP.NET MVC 3有点生疏,所以纯粹主义者视而不见,但是下面的工作,我只需要创建Html Helper.

@using DD4T.Providers.SDLTridion2011sp1;

@{
    var linkFactory = new LinkFactory();
    linkFactory.LinkProvider = new TridionLinkProvider();
    var link = linkFactory.ResolveLink(Model.Component.Fields["related_link"].LinkedComponentValues[0].Id);
}
Run Code Online (Sandbox Code Playgroud)

虽然有点奇怪,但项目中已经没有帮助了.

干杯

Qui*_*ijn 9

我认为你是对的,这应该在框架中.但幸运的是,添加它很容易.只需使用如下扩展方法创建一个帮助器类:

namespace MyApp.Helpers
{
    public static class ModelHelper
    {
        public static string GetResolvedUrl(this IComponent component)
        {
            return GetResolvedUrl(component, null, null);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您确保您的视图使用名称空间MyApp.Helpers,则可以在组件视图中执行此操作:

@model DD4T.ContentModel.Component
@using MyApp.Helpers
<a href="@Model.GetResolvedUrl()">click here</a>
Run Code Online (Sandbox Code Playgroud)

我们很可能很快就会将其纳入框架中.


Alb*_*kes 6

确实没有用于解析链接的HTML帮助程序.主要原因可能是(根据MVC原则)链接应该已经在您的视图呈现的模型中解析.

如果从dd4t.ContentModel项目中签出ContentModel类,则组件的(已注释掉)属性"ResolvedUrl".这从未实现,但它是解决链接的更加合适的地方.但是您的代码可以完成这项工作,因此您可以随意实现自己的HTML帮助程序.