果园自定义令牌以存储标题

时间:2014-10-02 12:12:37

标签: content-management-system orchardcms orchardcms-1.6

我自己有一个像这样的自定义Orchard Token

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}

然而,这从未填充过,任何人都可以为我的这个黑暗角落带来一些亮点吗?

1 个答案:

答案 0 :(得分:0)

这里缺少的是背景。评估标记化字符串的代码将提供一个上下文对象,该对象将是对其进行评估的标记。通常,在该上下文中将存在Content对象,该对象将被传递到Content令牌的Lambda中。在这里,你告诉系统它是否找到了一个名为&#34; Topic&#34;对于上下文类型IContent,它应该由您的逻辑处理。不幸的是,这种情况从未发生过,因为调用代码没有将这样的对象设置到上下文中。

从您的问题来看,似乎您的目的是在添加评论时获得评论的标题。我认为你可以做Content.DisplayText,但是如果你必须开发自己的令牌,那么将它附加到内容令牌而不是构建一个新的根目录,不会在你想要的地方进行评估。因此,这将是内容的主题标记。