跳转到主要内容
tiger 提交于 2 April 2014

原文链接:https://drupal.org/node/1819442

     日期控件是被多数大型 Drupal 网站所使用的非常有贡献的模块。它的强大功能是使得 Drupal 变得更为强大的一个非常基本和重要的方面(例如在发布和事件当中,使用与编辑和格式化日期相关的案例)。这些功能从表面上看似乎很简单,但是当同时考虑时区、夏令时、地理位置和许多的格式化或界面的挑战时,情况事实上则会变得异常的复杂。        幸运的是,日期模块当中最重要的功能已经发展到一个非常稳定的状态。把日期控件最主要的几个方面移植到 Drupal 8 的核心当中有许多的潜在好处,如下:  
  • 用户体验:Drupal 7 当中的日期相关功能都存在相当的局限性,如果撤销日期模块必须安装的约定来使得更多的复杂格式化和界面特性得以实现,那么用户体验将会得到改善。
  • 贡献者体验:日期模块的一些基本元素对于贡献者来说是很重要的,鉴于此,我们可以为贡献者们提供一个更加顺畅和稳健的工具箱。同时为他们的努力提供更为一致的底层环境。
  • Drupal 8 核心中的其它特性:8版本的日期控件方案除了改善了目前核心的体验外,还使得其它很多很多的 Drupal 8 核心方案从中受益,特别是在如下几项:
    1. 多语言:进一步完善 Drupal 核心地理位置和多语言功能的努力,将会从改善日期配置和格式化功能中受益;
    2. 实体:完善核心当中的日期功能有助于通过一个统一的日期、日期编辑器/用户界面和日期显示格式化程序来统一实体属性和域。
    3. CMI:配置管理方案(CMI)将会从兼容CMI的日期变量当中受益。我们正在研究用CMI兼容的配置文件来存储日期格式。
    4. WSCCI(网络服务与环境核心方案):网络服务方案将会从所有日期域中的统一的JSON-LD序列化当中受益。
    5. VDC(Drupal 核心视图):鉴于视图日期功能也被移植进了核心,最近公布的VDC也会从中得到不少的好处。
     鉴于日期模块的稳定性和以上提到的好处,我们一直努力的将许多日期模块的控件移植进 Drupal 8 的核心里面。尤其是 8 版本的日期模块方案提出的路线图牵涉到了一些关键元素。  

核心内的日期模块

     在核心里面整合了一个新的日期类,这个类为 PHP 的日期时间(DateTime)对象加了一个包裹器,它的作用是提供更为灵活,更具功能性的格式和错误处理。该控件能接受许多形式的值,包括字符串日期、字符串表达式(例如:12AM today)、时间戳、日期数组又或者是另一个日期时间对象,甚至是基于前面的任何一种形式创建一个日期时间对象。      PHP的基本日期时间类的确没有翻译格式化显示日期的功能,和它不同的是,为了翻译和适配除公历以外的其他日历,Drupal中的日期组件包含并融合了php原生的int1dateformatter类。这个组件也轻量化了日期时间类中并不宽容的错误处理,以使它能够更好地进行输入验证。核心中有了这个组件后,第三方模块就能够在它其基础上继承或者接力,从而产生许多附加的日期、时间和日历的功能。   补丁:http://drupal.org/node/1802278

核心日期接口

     日期接口中包含了一些我们很想添加到核心中的辅助程序。这些中最重要的一个就是创建翻译的和未翻译的日期值列表,比如周几或几月这样的名称。翻译过的值用于显示,未翻译过的值用于数组的下标或者样式文件中的类名称。有了这样一个中心接口对核心和第三方模块都有好处。        创建一个可以处理这些的系统是可以使得核心能够支持像另外的日历系统,这个日历系统需要不仅能够翻译出日期,还能够提供像“周几”“几月”这样额外的值。向核心中添加的必要功能时,还会用到一些其它冗杂的辅助函。现有的大多数功能仍然会保留在第三方模块中(如下所示--repeats,all day,migrate,iCal等),而最常用的功能会变成核心的一部分。   补丁:http://drupal.org/node/1811912

核心中的日期表单元素和日期字段

     第三方日期接口包含了以下代码:日期快速接口元素,可以用到任意表单中的日期时间元素,而不仅是在字段里,如:日期选择列表,弹出式JQuery日历,日期文本字段,日期时区等。为了改善处理任意形式日期字段的用户界面,一个或者更多这些元素会被集成到核心中。它们也会被改造成能够兼容html5。        当前核心会包含支持日期时间字段的基本功能。现有的第三方模块可以用多种方式存储日期(像整数字段中存时间戳,数据库本地日期时间字段,或者varchar字段中存ISO日期)。我们必须为核心鉴别出在数据库中储存时间值的最好方式(基于数据库和整体负载测试),并且在核心中只提供一种存储方法。数据库本地存储方法已经从核心中移除了,因此问题就成了是把时间戳存到整数字段还是把ISO日期存到varchar字段。        第三方模块中的日期字段还有很多种其它的选项,一个起始日期和可选的结束日期,限制日期粒度的方式,可以选择不同的方法处理时区。那些方式将仍然保留在第三方模块中。核心中日期字段将会是个不包含以上属性的简化日期字段。核心日期字段必须高效,如同时间戳,事件日期或者用户档案中的生日字段一样。而设计的本意就是为达到这个目的只提供必需的功能。   补丁:http://drupal.org/node/501428

日期视图

        时间允许的话,还有一项任务是把日期视图功能整合到核心中,因为VDC已经变成一个正式的Drupal 8倡议。这可能会在特性冻结之后启动,因为在那之前视图不会稳定。

第三方模块

      一个需要持续跟进的任务是清楚地划定哪个功能将会保留在第三方模块中。鉴于以上,最有可能的是现有的第三方模块中(如:repeats,all day,migrate,iCal等)。进入核心的所有东西,唯一需要确定的就是它足够健壮,以便支持所有第三方模块可能都需要完成的操作,而不是把它们留给第三方模块去做。         Drupal 8 的补丁已经发布了,同时开发团队将在特性冻结时,协助把以上组件添加到核心中(特别是把日期接口和日期字段整合到核心中)。此后,我们的精力将集中在核心冻结时需要解决的其它倡议上(如:VDC整合,企业标准化,本地化等)。Karen和她的团队将在drupal.org上提供更新,想参与的大神们可以: