TYPO3 - TCA - Datetimeformat

时间:2017-12-29 14:48:07

标签: typo3 typo3-6.2.x

Typo3 6.2,正在处理我的个人分机。 我正在使用这个TCA的flexform:

'eventdate' => array(
    'exclude' => 1,
    'label' => 'Date of event :',
    'config' => array(
        'type' => 'input',
        'size' => 30,
        'eval'     => 'datetime',
        'checkbox' => '0',
        'default'  => time(),
    ),
),

...我的SQL字段是DATETIME,来自我的ext_tables.sql示例:

CREATE TABLE xxxxxxx
(
    eventdate DATETIME NOT NULL,
);

问题:保存时,Typo3生成的字段格式为 hh:mm:ss dd:mm:yyyy ,但在我的SQL表格中,日期时间格式为 yyyy-mm-dd hh :mm:ss ,当用户尝试保存在后端时会出错:

  

1:这些字段在数据库中未正确更新:(eventdate)   可能与字段类型不匹配。

如何解决此问题?

2 个答案:

答案 0 :(得分:3)

我认为int DATA TYPE是在数据库中以tstamp格式存储DATE的最佳方式。

您需要定义eventdate DATA TYPE,如下所示

CREATE TABLE xxxxxxx
(
    eventdate int(11) unsigned DEFAULT '0' NOT NULL,
);

答案 1 :(得分:1)

原始问题的TCA配置错过了dbType属性,该属性指示TYPO3在保存DataHandler中的数据期间使用不同的时间格式(默认格式为unix时间戳,其标准化为UTC)。

有关详细信息,请参阅https://docs.typo3.org/typo3cms/TCAReference/7.6/Reference/Columns/Input/#dbtype(文档适用于TYPO3 7.6,但也适用于TYPO3 6.0以后。)

<强> ext_tables.sql

CREATE TABLE tx_myextension_xxxxxxx (
   eventdate DATETIME default NULL
)

TCA字段配置

'eventdate' => array(
    'exclude' => 1,
    'label' => 'Date of event:',
    'config' => array(
        'type' => 'input',
        'size' => 30,
        'eval'     => 'datetime',
        'dbType'   => 'datetime',
        'default'  => date('Y-m-d H:i:s'),
    ),
),
  • 已移除checkbox,这对于input
  • 类型来说是多余的
  • 将默认值调整为date('Y-m-d H:i:s')
  • 添加了dbType属性

TYPO3 v8的旁注

请参阅https://docs.typo3.org/typo3cms/TCAReference/8.7/ColumnsConfig/Type/Input.html#rendertype-inputdatetime,其中显示了可在TYPO3 v8中使用的datetime值的新渲染类型。