簡體   English   中英

果園自定義令牌以存儲標題

[英]Orchard custom token to store title

我有一個像這樣的自定義果園令牌

public void Describe(DescribeContext context) 
        {
            context.For("Site", T("Site"), T("Site settings."))
                .Token("RootUrl", T("RootUrl"), T("The current site's root url."));

            context.For("Topic", T("Topic"), T("Topic contents."))
                .Token("Title", T("Title"), T("Title of the topic"));
        }

        public void Evaluate(EvaluateContext context)
        {
            context.For("Site", _orchardServices.WorkContext.HttpContext.Request)
                .Token("RootUrl", token => _orchardServices.WorkContext.HttpContext.Request.Url.GetLeftPart(UriPartial.Authority));

            context.For<IContent>("Topic")
                .Token("Title", content =>
                {
                    int id = content.As<CommentPart>().Record.CommentedOn;
                    var contentItem = _contentManager.Get(id);
                    return contentItem.As<TitlePart>().Title;
                })
                .Chain("Title", "Title", content => 
                {
                    int id = content.As<CommentPart>().Record.CommentedOn;
                    var contentItem = _contentManager.Get(id);
                    return contentItem.As<TitlePart>().Title;
                });
        }

在我的Orchard CMS中,我有一條規則,當添加評論時會發送一封電子郵件,因此在我鍵入的電子郵件的文本框中

{Topic.Title}

但是,這里從來沒有有人居住,有人能給我的黑暗角落帶來些許光芒嗎?

這里缺少的是上下文。 評估標記化字符串的代碼將提供一個上下文對象,它將作為評估令牌的對象。 通常,在該上下文上將有一個Content對象,該對象將傳遞到Content令牌的Lambda中。 在這里,您要告訴系統,如果它在上下文中找到類型為IContent的稱為“主題”的東西,則應由您的邏輯處理。 不幸的是,這永遠不會發生,因為調用代碼沒有將這樣的對象設置到上下文中。

從您的問題看來,您的意圖似乎是在添加評論時獲得評論的標題。 我認為,您可以只執行Content.DisplayText ,但是如果您必須開發自己的令牌,請將其附加到內容令牌上,而不是構建一個不會在您期望的位置進行評估的新根目錄。 因此,這將是Content之外的Topic令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM