Ниже приведен алгоритм добавления своего поля во 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
- Log in to post comments