いくつかの追加のコンテンツタイプが設定されたOrchardcmsモジュールがあり、コードを介してAutoRouteコンポーネントを追加しました。すべてが完璧に機能しますが、デフォルトのパーマリンクパターンには満足していません。
私がやろうとしているのは、カスタムパターンを追加し、コンテンツタイプでパブリックプロパティの1つを使用することです。私の場合、カスタムタイプにはClubNameというパブリックプロパティがあり、それを使用したいと思います(ルーティングの観点からはより理にかなっています)。
オーチャードパーツのクラス名は。と呼ばれ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));