Перейти к основному содержанию

Программное добавление поля во views 3

Отправлено said от ср, 08/17/2016 - 16:15

Ниже приведен алгоритм добавления своего поля во views

1. В модуле использовать hook_views_api()

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

2. Использовать hook_views_data(), эту функцию сохранить в папке с модулем, в файле под именем my_module.views.inc

function my_module_views_data() {
  $data['my_module']['table']['group'] = 'СКИП';
  $data['my_module']['table']['join'] = array(
    '#global' => array(),
  );
  $data['my_module']['task_number'] = array(
    'title' => 'Номер задачи',
    'help' => 'Составной номер задачи',
    'field' => array(
      'handler' => 'views_handler_task_number_field',
    ),
  );
 
  return $data;
}

3. Создать класс views-обработчика, так же в отдельном файле с именем views_handler_task_number_field.inc

class views_handler_task_number_field extends views_handler_field {
  function query() {
         $this->ensure_my_table();
         
         // здесь я добавляю поле в запрос
    $this->field_alias = $this->query->add_field(NULL, '(SELECT COUNT(*) + 1 FROM field_data_field_task_request tn WHERE tn.field_task_request_target_id = field_data_field_task_request.field_task_request_target_id AND tn.entity_id < field_data_field_task_request.entity_id)', 'task_number');
  }

  function render($values) {
      // здесь вывожу это поле
    return isset($values->field_field_task_request[0]['rendered']['#markup']) ? "{$values->field_field_task_request[0]['rendered']['#markup']}.{$values->task_number}" : $values->nid;
  }
}

4. В файле .info модуля подключить класс обработчика

files[] = views_handler_task_number_field.inc

 

Теги