Вы здесь

Как обозначить модулю Views поле как datetime в кастомной сущности?

0

Добрый день, создаю кастомную сущность, в которой создаю 3 поля
field_id - INT
field_text - VARCHAR
field_date - DATETIME

Хочу хранить информацию примерно такого рода:

1;Some text;2018-02-02 11:38:12

Создал модуль следующего содержания:

ce_entity.info

name = CE Entity
description = CE Entity
version = 7.x-1.0
core = 7.x
dependencies[] = entity

files[] = ce_entity.views.inc

ce_entity.install

<?php

function ce_entity_schema() {
  $schema['ce_entity'] = array(
    'fields' => array(

      'field_id' => array(
        'description' => 'Field ID',
        'type' => 'int',
        'unsigned' => TRUE,
      ),
      'field_text' => array(
        'description' => 'Field text',
        'type' => 'varchar',
        'length' => 255,
      ),
      'field_date' => array(
        'description' => 'Field date',
        'type' => 'varchar',
        'length' => 255,
        'mysql_type' => 'datetime',
      ),
    ),
    'primary key' => array('field_id'),
  );

  return $schema;
}

ce_entity.module

<?php

function ce_entity_entity_info() {

  $info = array();

  $info['ce_entity'] = array(
    'label' => t('CE Entity'),
    'base table' => 'ce_entity',
    'entity keys' => array(
      'id' => 'field_id',
      'label' => 'Field ID',
    ),
    'entity class' => 'Entity',
    'controller class' => 'EntityAPIController',
    'module' => 'ce_entity',
  );

  return $info;
}

function ce_entity_views_api() {
   return array(
      'api' => 3,
   );
}

ce_entity.views.inc

<?php

function ce_entity_views_data_alter(&$data) {
  $data['ce_entity']['field_date'] = array(
    'title' => 'Field datetime',
    'help' => 'Field datetime',
    'field' => array(
      'handler' => 'views_handler_field_date',
      )
  );
}

Вроде в views_data_alter указал что воспринимать как date, однако поле пустое при отображении в Views (значение в таблице имеется 2018-02-02 11:38:12)

Пытался указать handler из модуля date (если я правильно понял из папки date_views/includes) - date_views_fields. Вьюха начинает ругаться на поле что возможно handler сломан

Подскажите пожалуйста, что я не так делаю, дату принципиально хранить в date или datetime, стандартный int (в unix) не подходит, т.к. даты будут в том числе младше 1970 года.

Версия Drupal: 
7.x
Категория: 
Entity API
Вопрос задан 01.03.2019 - 10:49

Ответы

0

Вопрос закрываю, что то за тупил и запутался в настройках хэндлеров, дефолтный хэндлер работает только с UNIX, нужно пропатчить, либо на основе патча свой создать в модуле
https://www.drupal.org/project/views/issues/2178287

Ответ дан 02.03.2019 - 11:30

Похоже решение ещё проще, нужно просто было добавить 'is date' => TRUE, в описание поля в hook_views_data_alter

<?php

function ce_entity_views_data_alter(&$data) {
  $data['ce_entity']['field_date'] = array(
    'title' => 'Field datetime',
    'help' => 'Field datetime',
    'field' => array(
      'handler' => 'views_handler_field_date',
      'is date' => TRUE,
      )
  );
}
Комментарий оставлен 02.03.2019 - 12:09