Урок - Хук hook_views_data()

Обучающий онлайн курс
Drupal 6, Разработка модулей.

Лицензия: Копирование запрещено.

Хук hook_views_data()

hook_views_data рассказывает модулю Views о таблицах, полях и взаимодействии с базовыми таблицами.

Реализация хука должна возвращать ассоциативный массив формата:

return array(
	'<имя_таблицы1>' => array(
		'table' => array(
			'group' => '<название_группы_для_имя_таблицы1>',
			'join' => array(
				'<базовая таблица>' => array(
					'left_field' => '<поле базовой таблицы>',
					'field' => '<поле текущей таблицы>',
				),
				// описание побключения к остальным базовым таблицам
			),
			'base' => array(
				'field' => '<базовое поле>',
				'title' => '<название таблицы>',
				'help' => '<подсказка>',
				'weight' => <вес>,
			),
		),
		'<поле1>' => array(
			'title' => t('Text field'),
			'group' => t('Group fot Text field'),
			'help' => t('Help for text field.'),
			'real field' => 'real_text_field',
			'field' => array(
				'handler' => 'views_handler_field',
				'click sortable' => TRUE,
			),
			'sort' => array(
				'handler' => '<views_handler_sort>',
				'formula' => '...',
			),
			'filter' => array(
				'handler' => '<views_handler_filter>',
			),
			'argument' => array(
				'handler' => '<views_handler_argument>',
			),
			'relationship' => array(
				'handler' => '<views_handler_relationship>',
			),
		),
		'<поле2>' => array(
			// описание поля 2
		),
		// описание остальных полей
	),
	'<имя_таблицы2>' => array(
		// описание таблицы "имя_таблицы2"
	),
	//	описание остальных таблиц
	...
);

В вашей реализации многие из указанных параметров будут отсутствовать.

Разберем по порядку что есть что.

  • <имя_таблицы> (в примере выше <имя_таблицы1>, <имя_таблицы2>) - это название таблицы в базе данных (без префикса Drupal) для которой будем указывать параметры.
    • в зарезервированном индексе table указываем параметры касающиеся текущей таблицы.
      • в ключе group - указывается название группы. Отображается при добавлении фильтров, аргументов и других параметров представления.
      • в ключе join - указываются параметры присоедиения (JOIN) к базовым таблицам, таким как {users}, {node}, ...

        Структура массива join следующая:

        • ключом (<базовая таблица>) является одна из базовых таблиц ({node}, {users}, ...)
        • в ключе left_field указывается первичный ключ базовой таблицы, для {node} это nid, для {users} будет поле {uid}.
        • в ключе field указывается ключ из текущей таблицы по которому идет связь с базовой таблицей.
      • в ключе base - указываются параметры, что бы сделать из текущей таблицы базовую.
        • в ключе field указывается первичный ключ для базовой таблицы.
        • в ключе title указывается название таблицы.
        • в ключе help указывается подсказка к таблице.
        • в ключе weight указывается вес для сортировки в списке базовых таблиц.
    • если индекс не совпадает с 'table', то следующая структура рассматривается как описание полей таблицы (<поле1>, <поле2> ). Полем таблицы может быть как физически существующие поле в таблице, так и синонимом.
      • в ключе title - указываем название поля. Отображается при редактировании представления.
      • в ключе group, не обязательно - указываем название группы для текущего поля. Если параметр group отсутствует, то используется group из параметров текущей таблицы.
      • в ключе help - указываем краткое пояснение для поля. Отображается при редактировании представления.
      • в ключе 'real field'(не обязательный параметр) указывается настоящее имя поля, если в имя поля является синонимом(alias).
      • в ключе field указываются параметры для обработки, при добавлении "поля"/"field" в представлении. Используется в части SELECT запроса.
        • ключ click sortable разрешает(TRUE)/запрещает(FALSE) сортировать по данному полю.
        • в ключе handler указывается название обработчика, который отвечают за обработку указанного действия.
      • в ключе sort указываются параметры для обработки, при добавлении "сортировки"/"sort" в представлении. Используется в части ORDER BY запроса.
        • в ключе handler указывается название обработчика, который отвечают за обработку указанного действия.
        • в ключе formula - часть SQL запроса для вставки в SQL-запрос.
      • в ключе filter указываются параметры для обработки, при добавлении "фильтра"/"filter" в представлении. Используется в части WHERE запроса.
        • в ключе handler указывается название обработчика, который отвечают за обработку указанного действия.
      • в ключе argument указываются параметры для обработки, при добавлении "аргумента"/"argument" в представлении. Используется если поле является аргументом.
        • в ключе handler указывается название обработчика, который отвечают за обработку указанного действия.
      • в ключе relationship указываются параметры для обработки, при добавлении "отношения"/"relationship" в представлении. Используется для присоединения других таблиц (JOIN).
        • в ключе handler указывается название обработчика, который отвечают за обработку указанного действия.