Після цього створюємо файл example_module.views.inc і в ньому оголошуємо hook_views_data(). Першим йде розділ опису таблиці, в якому вказуємо такі властивості:
- "group" - назва групи, в якій наші налаштовування будуть виводитися. Наприклад: "Node: Node ID", "Taxonomy: Term description". Це важливо для цілісності, так як користувацький інтерфейс в’юшок сортує поля по групах, і це полегшить пошук
- "title" - назва поля, воно має бути зрозумілим та інтуїтивним
- "help" - більш докладний опис
Зазвичай використовується тільки властивість "group".
Якщо ви хочете, щоб ваша таблиця була центральною у в'юшці, ви можете визначити її як базову.
В цьому випадку можна вказати такі властивості:
- "field" - primary key для оголошуваної таблиці. Якщо ви хочете зробити таблицю базовою, primary key обов'язковий. Для таблички node primary key - це nid, для users - uid
- "title" - назва таблиці, яка буде відображатися в інтерфейсі користувача
- "help" - більш детальний опис
- "database" - в разі, якщо таблиця, яку ви оголошуєте знаходиться в іншій базі даних, це поле обов'язкове
Також ми можемо створити відкритий зв'язок нашої таблиці з будь-якою іншою (в даному прикладі з таблицею "node"). Для цього в розділі "join" вказуємо такі властивості:
- "handler" - обробник, який буде використовуватися. За замовчуванням це "views_join". Ви можете використовувати свій, але для вирішення спільних задач в цьому нема необхідності
- "table" - таблиця, до якої ми будемо приєднуватися. Властивість опціональна і в загальних випадках непотрібна.
- "field" - поле по якому будемо приєднувати таблицю - це обов'язкова властивість
- "left_table" - наступний крок для досягнення цільової таблиці - проміжна таблиця. Якщо проміжної немає, то не вказуємо цю властивість
- "left_field" - поле по якому будемо приєднувати таблицю "ліворуч" - це обов'язкова властивість
- "type" - LEFT (за замовчуванням) або INNER
/**
* Implements hook_views_data()
*/
function example_module_views_data() {
// The 'group' index will be used as a prefix in the UI for any of this
// table's fields, sort criteria, etc. so it's easy to tell where they came
// from.
$data['example_table']['table']['group'] = t('Example table');
// Define this as a base table. In reality this is not very useful for
// this table, as it isn't really a distinct object of its own, but
// it makes a good example.
$data['example_table']['table']['base'] = array(
'field' => 'nid',
'title' => t('Example table'),
'help' => t("Example table contains example content and can be related to nodes."),
'weight' => -10,
);
// This table references the {node} table.
// This creates an 'implicit' relationship to the node table, so that when 'Node'
// is the base table, the fields are automatically available.
$data['example_table']['table']['join'] = array(
// Index this array by the table name to which this table refers.
// 'left_field' is the primary key in the referenced table.
// 'field' is the foreign key in this table.
'node' => array(
'left_field' => 'nid',
'field' => 'nid',
),
);
Отже, таблицю ми оголосили. Далі потрібно описати поля в таблиці. Поля можуть мати такі властивості:
- "group", "title", "help" - як і для таблиці, значення цих полів використовуються в інтерфейсі користувача
- "real field" - якщо поле - це синонім, то тут потрібно вказати реальне ім'я поля
- "field" - оголошення масива обробника для секції "Field". За замовчуванням використовується "views_handler_field". Якщо цей параметр вказаний, то поле з'явиться в списку полів для виводу. Атрибут "click_sortable", установленний в TRUE дозволяє сортування по цьому полю (в таблицях, наприклад)
- "filter" - оголошення масива обробника для секції "Filters". За замовчуванням використовується "views_handler_filter". Якщо цей параметр вказаний, то поле з'явиться в списку полів для фільтрації
- "sort" - оголошення масиву обробника для секції "Sort criteria". За замовчуванням використовується "views_handler_sort". Якщо цей параметр вказаний, то поле з'явиться в списку полів для сортування
- "relationship" - дозволяє додавати зв'язки по цьому полю - секція "Relationship". За замовчуванням використовується обробник "views_handler_relationship". Обов'язково потрібно вказати базову таблицю для приєднання - елемент "base" і поле, по якому це приєднання буде відбуватися - елемент "field"
- "argument" - оголошення масиву обробника для секції "Contextual Filters". За замовчуванням використовується обробник "views_handler_argument".
// Next, describe each of the individual fields in this table to Views. For
// each field, you may define what field, sort, argument, and/or filter
// handlers it supports. This will determine where in the Views interface you
// may use the field.
// Node ID field.
$data['example_table']['nid'] = array(
'title' => t('Example content'),
'help' => t('Some example content that references a node.'),
// Because this is a foreign key to the {node} table. This allows us to
// have, when the view is configured with this relationship, all the fields
// for the related node available.
'relationship' => array(
'base' => 'node',
'field' => 'nid',
'handler' => 'views_handler_relationship',
'label' => t('Example node'),
),
);
// Example plain text field.
$data['example_table']['plain_text_field'] = array(
'title' => t('Plain text field'),
'help' => t('Just a plain text field.'),
'field' => array(
'handler' => 'views_handler_field',
'click sortable' => TRUE,
),
'sort' => array(
'handler' => 'views_handler_sort',
),
'filter' => array(
'handler' => 'views_handler_filter_string',
),
'argument' => array(
'handler' => 'views_handler_argument_string',
),
);
// Example timestamp field.
$data['example_table']['timestamp_field'] = array(
'title' => t('Timestamp field'),
'help' => t('Just a timestamp field.'),
'field' => array(
'handler' => 'views_handler_field_date',
'click sortable' => TRUE,
),
'sort' => array(
'handler' => 'views_handler_sort_date',
),
'filter' => array(
'handler' => 'views_handler_filter_date',
),
);
return $data;
}
В результаті отримуємо дуже зручний інтерфейс, позбавляємось необхідності писати мільйони запитів і отримуємо зручність в обслуговуванні сайту.
Дякую за увагу.