9.14. Pisanje integracije sa Views
Views modul je široko korišćen u Drupal ekosistemu. Liste sadržaja, tabele, blokovi, slajd-šou, izvoz podataka – ovi delovi sadržaja obično se prikazuju pomoću Views. Ako koristite Content types, Block types ili druge tipove entiteta, Views je već automatski integrisan sa njima i možete koristiti Views za prikaz vašeg sadržaja. Međutim, za vaš prilagođeni modul koji koristi posebnu prilagođenu bazu podataka, kreiranu pomoću hook_schema(), treba da napišete integraciju sa Views da biste prikazali podatke vašeg modula u Views UI.
Hajde da pogledamo integraciju za modul Did this help sa Views:
https://www.drupal.org/project/did_this_help
Modul kreira sopstvenu bazu podataka za čuvanje podataka. U ovoj tabeli su stringovi, ID-jevi, datumi, pa treba definisati različite handler-e za integraciju sa Views:

Na početku je potrebno dodati fajl MODULENAME.views.inc koji se automatski učitava, pa nije potrebno nigde posebno navoditi njegovu lokaciju. U fajlu *.views.inc treba implementirati hook_views_data():
<?php
/**
 * @file
 * Pruža podatke za views za modul did_this_help.
 */
/**
 * Implementacija hook_views_data().
 */
function did_this_help_views_data() {
}
Ova implementacija treba da vrati niz koji opisuje strukturu vaše prilagođene baze podataka modula.
Počnite sa imenom tabele baze podataka kao prvim ključem niza:
  $data['did_this_help'] = [
    'table' => [
      'group' => t('Did this help?'),
      'base' => [
        'field' => 'id',
        'title' => t('Did this help? entries'),
        'help' => t('Sadrži listu Did this help? zapisa.'),
      ],
    ],
  ];
Ovo je opis tabele sa imenom u ključu niza $data['did_this_help']. Ako treba da integrišete više tabela, dodajte različite ključeve u $data nizu: $data['did_this_help1'], $data['did_this_help2'].
Dalje u opisu niza sledi:
group - omogućava grupisanje polja u isti deo u Views UI radi lakšeg odabira polja.
base - pokazuje serijski ID tabele koji će se kasnije koristiti za povezivanje tabela preko spoljnih ključeva.
Zatim opisujemo svako polje koje želimo da prikažemo u Views:
$data['did_this_help']['id']= [
  'real field' => 'id',
  'title' => t('Did this help? record ID'),
  'help' => t('Zapis iz Did this help? modula.'),
  'field' => [
    'id' => 'standard',
  ],
  'sort' => [
    'id' => 'standard',
  ],
  'filter' => [
    'id' => 'numeric',
  ],
  'argument' => [
    'id' => 'numeric',
  ],  
];
real field - definiše stvarno ime kolone u bazi ako koristite alias-e u ključevima niza. Za jedno Drupal polje realna polja mogu imati različite vrednosti, na primer Link polje ima dve vrednosti: Title i URI. Svaka odgovara svojoj koloni u bazi. Imena kolona se sastoje od imena polja i imena svojstva (title, uri):

Imena ovih kolona su automatski kreirana od strane Link modula, ali za prilagođene module "real field" treba definisati sami u hook_views_data().
title, help - informacije za Views UI.
Slede Handler ID-jevi za: field, sort, filter, argument. Handler definiše način filtriranja i prikaza polja, na primer datumi se prikazuju sa Date Format-om i filtriraju pomoću Date Calendar Popup-a. Brojevi imaju filtere sa operatorima >, < i =, za stringove filter po dužini stringa.
Handleri za polja
Handleri za polja pomažu da se generiše deo SQL upita posle SELECT.
Listu field handlera iz Drupal core možete pronaći ovde:
Za prilagođene module često ćete koristiti standard handler za brojeve i stringove, a za datumske podatke date handler.
Na primer, polje ID koristi standard handler:
    'id' => [
      'real field' => 'id',
      'title' => t('Did this help? record ID'),
      'help' => t('Did this help? record.'),
      'field' => [
        'id' => 'standard',
      ],
      'sort' => [
        'id' => 'standard',
      ],
      'filter' => [
        'id' => 'numeric',
      ],
      'argument' => [
        'id' => 'numeric',
      ],
    ],
Handleri za sortiranje
Handleri za sortiranje omogućavaju uobičajeno i izloženo sortiranje u Views. Definišu deo SQL upita posle ORDER BY.
Listu sort handlera možete pronaći ovde:
Handleri za filtere
Handleri za filtere omogućavaju prikaz običnih, izloženih i kontekstualnih filtera u Views. Definišu deo SQL upita posle WHERE.
Listu filter handlera možete pronaći ovde:
Za filtriranje datuma sa Date Calendar popup-om možete koristiti handler "date":
  $data['did_this_help']['created'] = [
    'title' => t('Datum kreiranja zapisa'),
    'help' => t('Datum kreiranja zapisa Did this help? modula'),
    'field' => [
      'id' => 'date',
    ],
    'argument' => [
      'id' => 'date',
    ],
    'filter' => [
      'id' => 'date',
    ],
    'sort' => [
      'id' => 'date',
    ],
  ];
Handler za relacije (Relationship)
Handler za relacije omogućavaju dodavanje JOIN-ova u SQL upit i izvlačenje podataka iz više tabela u jednom upitu.
Baza modula Did this help? ima kolonu sa korisničkim ID-jevima. Korišćenjem relationship handler-a možete dodati vezu u Views UI između redova iz did_this_help i korisnika i prikazati podatke iz više tabela:
  $data['did_this_help']['uid'] = [
    'title' => t('Korisnički ID za Did this help? zapis'),
    'help' => t('Korisnički ID za Did this help? zapis'),
    'field' => [
      'id' => 'standard',
    ],
    'sort' => [
      'id' => 'standard',
    ],
    'filter' => [
      'id' => 'numeric',
    ],
    'argument' => [
      'id' => 'numeric',
    ],
    'relationship' => [
      'title' => t('Korisnik'),
      'help' => t('Korisnik kome pripada zapis.'),
      'base' => 'users_field_data',
      'base field' => 'uid',
      'id' => 'standard',
    ],
  ];
Ovde za polje dodajemo relationship gde navodimo:
- base - tabela na koju želimo da se pridružimo (join),
- base field - polje po kojem se vrši pridruživanje,
- title i help - za Views UI,
- id - tip relationship handler-a.
Listu relationship handler-a možete videti ovde:
Iako Views pruža širok spektar različitih handler-a, možete nasleđivati osnovnu klasu handler-a i pisati svoje prilagođene handler-e za polja, filtere i sortiranje. U narednom članku pisaćemo prilagođeni handler za Views filter.