我有一个 Orchard cms 模块,其中设置了一些额外的内容类型,并通过代码添加了一个 AutoRoute 组件。一切都很完美,但是我对默认的永久链接模式不满意。
我想要做的是添加一个自定义模式并在我的内容类型中使用其中一个公共属性。在我的例子中,自定义类型有一个名为 ClubName 的公共属性,我希望使用它(从路由的角度来看更有意义)。
Orchard 部分类名称称为TrackPart
。
我尝试过{Content.TrackPart.ClubName}
, {Content.Track.ClubName}
,和各种其他变体{ContentItem.TrackPart.ClubName}
,{Content.TrackPart.ClubName}
但似乎没有任何效果。
我对果园很陌生,所以我很可能会错过一些简单的东西。
任何帮助将不胜感激。
为了响应@Bertrand-le-roy 的反馈,我通过复制示例令牌创建了自己的令牌。我现在可以在下拉菜单中看到令牌并选择它。但是路由模式仍然不起作用。
我只能假设我误解了 Evaluate() 函数的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>
The above code was based on the DateTimeField token inside the Orchard.Fields module.
context.For("DateTimeField")
.Token("Date", (Func)(field => field.DateTime))
.Chain("Date", "Date", (Func)(field => field.DateTime));