Orchardcms 一种用液体存取字段内容的方法

Orchardcms 一种用液体存取字段内容的方法,orchardcms,Orchardcms,我正在使用orchard core的最新NuGet版本。因为我想使用Bulma作为CSS框架,所以我需要创建tepmlates。我遇到的几个问题之一是:如何从液体模板中访问字段内容 例如,Blog主题的内容类型为Article。在文章中有一个字段副标题。我创建了模板文章TextField作为 {{Model.Field.Text}问题是OrchardCore.ContentFields模块没有将TextField类型注册到Liquid的TemplateContext.GlobalMemberA

我正在使用orchard core的最新NuGet版本。因为我想使用Bulma作为CSS框架,所以我需要创建tepmlates。我遇到的几个问题之一是:如何从液体模板中访问字段内容

例如,Blog主题的内容类型为Article。在文章中有一个字段副标题。我创建了模板文章TextField作为


{{Model.Field.Text}
问题是OrchardCore.ContentFields模块没有将
TextField
类型注册到Liquid的
TemplateContext.GlobalMemberAccessStrategy
服务,这会阻止您访问
TextField
对象上的任何成员

该模块的注册方式如下所示:

TemplateContext.GlobalMemberAccessStrategy.Register();
这不仅是不必要的,因为
LiquidViewTemplate
已经自动注册了模型,它也没有多大帮助,因为您只能访问模型的
字段
属性,而不能访问其
文本
属性

例如,这将产生一些输出:

{{Model}}

这也将:

{{Model.Field}}

但正如您正确注意到的,这不会:

{{Model.Field.Text}

这显然是Orchard Core中的一个遗漏,特别是在ContentFields模块中

由于您使用的是NuGet软件包,因此显然无法将其破解到源代码中。但是您可以做的是将一个
Startup
类添加到从
StartupBase
派生的主题中,并添加以下静态构造函数:

static Startup()
{
    TemplateContext.GlobalMemberAccessStrategy.Register<TextField>();
}
静态启动()
{
TemplateContext.GlobalMemberAccessStrategy.Register();
}
请确保引用OrchardCore.ContentFields NuGet包,并为要编译的主题导入
OrchardCore.ContentFields.Fields
命名空间

之后,您将能够从Liquid模板访问
文本
属性


最后,,我建议您在GitHub上提交一个关于此遗漏的问题,以便最终从主题的启动文件中删除我提到的代码。

问题是OrchardCore.ContentFields模块没有将
TextField
类型注册到Liquid的
TemplateContext.GlobalMemberAccessStrategy
服务,它阻止您访问
TextField
对象上的任何成员

该模块的注册方式如下所示:

TemplateContext.GlobalMemberAccessStrategy.Register();
这不仅是不必要的,因为
LiquidViewTemplate
已经自动注册了模型,它也没有多大帮助,因为您只能访问模型的
字段
属性,而不能访问其
文本
属性

例如,这将产生一些输出:

{{Model}}

这也将:

{{Model.Field}}

但正如您正确注意到的,这不会:

{{Model.Field.Text}

这显然是Orchard Core中的一个遗漏,特别是在ContentFields模块中

由于您使用的是NuGet软件包,因此显然无法将其破解到源代码中。但是您可以做的是将一个
Startup
类添加到从
StartupBase
派生的主题中,并添加以下静态构造函数:

static Startup()
{
    TemplateContext.GlobalMemberAccessStrategy.Register<TextField>();
}
静态启动()
{
TemplateContext.GlobalMemberAccessStrategy.Register();
}
请确保引用OrchardCore.ContentFields NuGet包,并为要编译的主题导入
OrchardCore.ContentFields.Fields
命名空间

之后,您将能够从Liquid模板访问
文本
属性

最后,我建议您在GitHub上提交一个关于此遗漏的问题,以便最终从主题的启动文件中删除我提到的代码