是否有可能创建使用自定义类型属性的内容的果园自动布线?(Is it possible to crea

2019-09-20 10:13发布

我有设置一些附加的内容类型的果园CMS模块并增加通过代码的自动敷设组件。 一切完美,但我不喜欢默认的永久链接模式。

我所试图做的是添加自定义模式,并使用我的内容类型的公共属性之一。 在我的情况下,自定义类型有一个名为ClubName公共财产,我想,要使用(它更有意义,从路由的角度看)。
果园部分类的名字叫做TrackPart

我曾尝试{Content.TrackPart.ClubName} {Content.Track.ClubName} {ContentItem.TrackPart.ClubName} {Content.TrackPart.ClubName}和各种其他的变化,但似乎没有奏效。

我是真正的新果园所以有一个高的机会,我简单的东西。
任何帮助将不胜感激。

为了响应反馈@贝特朗乐罗伊我通过复制例如令牌创建了自己的标记。 现在我可以看到在下拉菜单中的令牌,并选择它。 然而,路由模式仍然没有工作。

我只能假设,我误解了评估()函数的context.For使用。 它看起来像我没有得到我所需要的数据

这里是我到目前为止所。

public class TrackPartTokens : ITokenProvider { private readonly IContentManager _contentManager;

  public TrackPartTokens(IContentManager contentManager) { _contentManager = contentManager; } public Localizer T { get; set; } public void Describe(dynamic context) { context.For("Track", T("Track"), T("Tokens for Track")) .Token("ClubName", T("ClubName"), T("The name of the club.")) ; } public void Evaluate(dynamic context) { context.For<TrackPart>("Track") .Token("ClubName", (Func<TrackPart, object>)(field => field.ClubName)) .Chain("ClubName", "ClubName", (Func<TrackPart, object>)(field =>field.ClubName)) ; }</code> 

上面的代码是基于Orchard.Fields模块内部的DateTimeField字段令牌。

context.For( “DateTimeField字段”).Token( “日期”,(Func键)(字段=> field.DateTime)).Chain( “日期”, “日期”,(Func键)(字段=> field.DateTime)) ;

Answer 1:

你必须使自己的令牌。 它真的很容易。 复制工作的例子。



Answer 2:

我遇到过同样的问题。

一些故障排除后,我设法改变我的implementaion以下(适用于您的例子,请注意您的设置可能需要一些改变LINQ的功能),以获得自动布线工作:

在您的令牌类:

  • 首先添加using System.Linq的声明。
  • 然后改变你的评估实现以下几点:

     context.For<IContent>("Content") .Token("ClubName", (Func<IContent>, object>)(content => content.ContentItem.Parts.OfType<TrackPart>().First().ClubName)); 
  • 请确保您的Migrations.cs设置AutoroutePart使用内容的前缀。 喜欢:

     .WithPart("AutoroutePart", partBuilder => partBuilder .WithSetting("AutorouteSettings.AllowCustomPattern", "true") .WithSetting("AutorouteSettings.AutomaticAdjustmentOnEdit", "false") .WithSetting("AutorouteSettings.PatternDefinitions", @"[{Name:'Track', Pattern:'{Content.ClubName}', Description:'Your description'}]") .WithSetting("AutorouteSettings.DefaultPatternIndex", "0")) 

似乎有一些问题在乌节源TokenManager级,只允许目标参数等于“内容”,以呼叫:_data.TryGetValue(目标,超时值)工作(TokenManager.cs 67行)。 我已经尝试了许多不同的设置,但在_data词典总是只包含“内容”的关键。



文章来源: Is it possible to create an orchard autoroute using contents of a custom type property?