logo

Dodatni tipovi blokova (EBT) - Novo iskustvo rada sa Layout Builder-om❗

Dodatni tipovi blokova (EBT) – stilizovani, prilagodljivi tipovi blokova: slajdšouvi, kartice sa tabovima, kartice, akordeoni i mnogi drugi. Ugrađena podešavanja za pozadinu, DOM Box, javascript dodatke. Iskusite budućnost kreiranja rasporeda već danas.

Demo EBT moduli Preuzmite EBT module

❗Dodatni tipovi pasusa (EPT) – Novo iskustvo rada sa pasusima

Dodatni tipovi pasusa (EPT) – analogni skup modula zasnovan na pasusima.

Demo EPT moduli Preuzmite EPT module

Scroll

9.14. Pisanje integracije sa Views

25/05/2025, by Ivan

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:

Did this help baza podataka

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.

https://api.drupal.org/api/drupal/core%21modules%21views%21views.api.php/function/hook_views_data/9.0.x

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):

Link tabela u bazi

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:

https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21field%21FieldPluginBase.php/group/views_field_handlers/8.6.x

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:

https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21sort%21SortPluginBase.php/group/views_sort_handlers/8.6.x

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:

https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21filter%21FilterPluginBase.php/group/views_filter_handlers/8.6.x

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:

https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21relationship%21RelationshipPluginBase.php/group/views_relationship_handlers/8.6.x

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.