Orchard:生成一个自定义字段类型
在Orchard中定义新的content types时可以使用字段,现在Orchard只内置了一个文本类型字段,在实际应用中,我们肯定会遇到添加自己的字段类型,然后在新的content types上使用。这篇文章将教给大家的是在 http://orcharddatetimefield.codeplex.com 中的自定义日期时间数据类型。如果对如何生成一个模块不清楚,可以先看看本系列的前几篇文章。
目标
这个练习做完之后,我们将新增一个新的字段类型,使用界面如下图所示:有一个日期和时间编辑器
生成一个模块
codegen module CustomFields / IncludeInSolution: true
现在在Modules目录下有一个新的目录: CustomFields ,更改 module.txt :
View Code
这里我们定义了两个features,因为这个模块最后包括多个字段,我们想要区分这个模块的默认功能和日期字段功能,这个也正好可以演示一下分类和依赖的使用。
生成字段
在 CustomFields 目录下生成目录 Fields ,添加文件 DateTimeField.cs :
View Code
这个自定义字段DateTimeField是从 ContentField继承下来的,ContentField提供一些字段值存储等服务。这个字段将存储为strings。
生成一个view model
生成一个或多个view models虽然不是强制的,但是一个好的实践。View model将被用来封装model用于展现而用的模型。在一个新的 ViewModels 目录下添加文件 DateTimeFieldViewModel.cs :
View Code
生成字段设置
Create a Settings folder and add the following DateTimeFieldSettings.cs file to it:
View Code
这里我们定义了一个设类,这个类是个很简单的类,Display是一个枚举值写一个driver
在 Drivers 目录下添加文件 DateTimeFieldDriver.cs :
View Code
DateTimeFieldDriver 从 ContentFieldDriver 继承下来。一开始通过依赖注入获取localizer 依赖对象,以便我们能够通过代码获取本地化字符。静态的方法GetPrefix是一个用来定义字段类型示例在数据库中唯一列名的前缀。
Display和Editor获取字段的设置和值来构建shapes。
写模板
在 Views 目录下生成一个 Fields 和 EditorTemplates 目录,然后在EditorTemplates下生成一个 Fields 目录。
在 Views/Fields 下新增文件 Custom.DateTime.cshtml :
View Code
在 Views/EditorTemplates/Fields 下生成文件 Custom.DateTime.cshtml :
View Code
为了指定显示顺序和位置,在项目根目录下增加文件Placement.info:View Code
管理字段设置到现在还没有完全做完,我们还需要关心如何管理和持久化字段的设置,在 Settings 目录下增加文件 DateTimeFieldEditorEvents.cs :
View Code
这个类似与一个driver,但是是field settings。第一个方法获得设置并且决定展现的模板,第二个方法从提交窗口中更新模型值。生成目录 Views\DefinitionTemplates ,添加字段的编辑摸板文件 DateTimeFieldSettings.cshtml:
View Code
更新项目文件
打开项目文件 CustomFields.csproj :
View Code
添加样式
Create a Styles directory and create the following datetime.css :
View Code
使用字段
为了能够使用心得字段,首先必须打开 Orchard.ContentTypes 功能,还需要打开 DateTimeField 功能。
参考: Writing a content field http://orcharddatetimefield.codeplex.com/
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于Orchard:生成一个自定义字段类型的详细内容...