• 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目录下生成一个FieldsEditorTemplates目录,然后在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/

  • 相关阅读:
    laravel报错1071 Specified key was too long; max key length is 1000 bytes
    【laravel】Eloquent 模型事件和监听方式
    angular使用forRoot() 注册单一实例服务
    js判断电脑是windows系统还是mac系统
    扁平数据根据`parentId`生成树结构
    页面滚动到指定元素区域
    js简洁模式代码
    简单git使用命令
    图片懒加载 echo.js
    页面图片预加载与懒加载
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1958343.html
Copyright © 2020-2023  润新知